### Question:
ColumnSelect extends FluentSelect<T> { @SuppressWarnings("unchecked") public ColumnSelect<Object[]> columns(Property<?>... properties) { if (properties.length == 0) { throw new IllegalArgumentException("properties must contain at least one element"); } if (columns == null) { columns = new ArrayList<>(properties.length); } Collections.addAll(columns, properties); singleColumn = false; return (ColumnSelect<Object[]>)this; } protected  ColumnSelect(); protected  ColumnSelect(ObjectSelect<T> select); ColumnSelect<T> entityType(Class<?> entityType); ColumnSelect<T> entityName(String entityName); ColumnSelect<T> dbEntityName(String dbEntityName); ColumnSelect<T> where(Expression expression); ColumnSelect<T> where(String expressionString, Object... parameters); ColumnSelect<T> and(Expression... expressions); ColumnSelect<T> or(Expression... expressions); ColumnSelect<T> orderBy(String property); ColumnSelect<T> orderBy(String property, SortOrder sortOrder); ColumnSelect<T> orderBy(Ordering... orderings); ColumnSelect<T> orderBy(Collection<Ordering> orderings); ColumnSelect<T> prefetch(PrefetchTreeNode prefetch); ColumnSelect<T> prefetch(String path, int semantics); ColumnSelect<T> limit(int fetchLimit); ColumnSelect<T> offset(int fetchOffset); ColumnSelect<T> pageSize(int pageSize); ColumnSelect<T> statementFetchSize(int size); ColumnSelect<T> queryTimeout(int timeout); ColumnSelect<T> cacheStrategy(QueryCacheStrategy strategy); ColumnSelect<T> cacheStrategy(QueryCacheStrategy strategy, String cacheGroup); ColumnSelect<T> cacheGroup(String cacheGroup); ColumnSelect<T> localCache(String cacheGroup); ColumnSelect<T> localCache(); ColumnSelect<T> sharedCache(String cacheGroup); ColumnSelect<T> sharedCache(); @SuppressWarnings("unchecked") ColumnSelect<Object[]> columns(Property<?>... properties); @SuppressWarnings("unchecked") ColumnSelect<Object[]> columns(Collection<Property<?>> properties); ColumnSelect<Object[]> count(); ColumnSelect<Object[]> count(BaseProperty<?> property); ColumnSelect<Object[]> min(ComparableProperty<?> property); ColumnSelect<Object[]> max(ComparableProperty<?> property); @Deprecated ColumnSelect<Object[]> avg(org.apache.cayenne.exp.Property<?> property); ColumnSelect<Object[]> avg(NumericProperty<?> property); @Deprecated ColumnSelect<Object[]> sum(org.apache.cayenne.exp.Property<E> property); ColumnSelect<Object[]> sum(NumericProperty<E> property); ColumnSelect<T> having(Expression expression); ColumnSelect<T> having(String expressionString, Object... parameters); ColumnSelect<T> and(Collection<Expression> expressions); ColumnSelect<T> or(Collection<Expression> expressions); ColumnSelect<T> distinct(); ColumnSelect<T> suppressDistinct(); @Override Collection<Property<?>> getColumns(); @Override T selectFirst(ObjectContext context); @Override QueryMetadata getMetaData(EntityResolver resolver); @SuppressWarnings("unchecked") ColumnSelect<E> map(Function<T, E> mapper);  }### Answer:
@SuppressWarnings("unchecked") @Test public void columns() { ColumnSelect q = new ColumnSelect(); assertNull(q.getColumns()); q.columns(Artist.ARTIST_NAME, Artist.PAINTING_ARRAY); assertEquals(Arrays.asList(Artist.ARTIST_NAME, Artist.PAINTING_ARRAY), q.getColumns()); q = ObjectSelect.columnQuery(Artist.class, Artist.ARTIST_NAME, Artist.DATE_OF_BIRTH); assertEquals(Arrays.asList(Artist.ARTIST_NAME, Artist.DATE_OF_BIRTH), q.getColumns()); q.columns(Artist.PAINTING_ARRAY); assertEquals(Arrays.asList(Artist.ARTIST_NAME, Artist.DATE_OF_BIRTH, Artist.PAINTING_ARRAY), q.getColumns()); }