Стратегия тестирования ActivePivot

Я думал о внедрении автоматизированных тестов для различных частей серверов ActivePivot и, что наиболее важно, постпроцессоров.

Поскольку я в самом начале, я хотел бы узнать больше о состоянии дел в этой области, каковы лучшие практики и есть ли какие-либо предостережения, которых следует избегать.

Если у вас есть опыт, я буду рад прочитать от вас.

Ура, Паскаль

3 ответа

Я бы порекомендовал использовать Spring4JUnit для запуска контекста. Затем вы можете автоматически подключить компоненты и получить доступ к таким вещам, как служба запросов и активный диспетчер сводок.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:SPRING-INF/ActivePivot.xml", "classpath:cusomTestContext-test.xml"})

...

@Resource
private IActivePivotManager manager;

@Resource
private IQueriesService queriesService;

@Test
public void testManagerOk() {
    assertNotNull(manager);
    assertTrue(manager.getStatus().equals(State.STARTED));
}

 @Test
public void testManagerOk() {
   // run a query with the queries service
}
...

Вы можете определить пользовательские свойства теста для тестов в отдельном файле контекста, например, для загрузки набора тестовых данных.

Чтобы протестировать проект на основе ActivePivot, проще повторно использовать конфигурацию Spring. Это можно сделать с помощью ClassPathXmlApplicationContext:

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

Этот простой тест проверит, действительно ли ваш Spring в порядке. Затем, если вы хотите выполнить запрос, вы можете сделать следующее:

IQueriesService queriesService = context.getBean(IQueriesService.class);
queriesService.execute(new MDXQuery(someMDX));

Если вы хотите проверить свой загрузочный слой, вы можете сделать:

IStoreUniverse storeUniverse = context.getBean(IStoreUniverse.class);
for (IRelationalStore store : storeUniverse.values) {
    assertEquals(hardcodedValue1, store.getSize())
    assertEquals(hardcodedValue2, store.search("someKey", "someValue").size())
}

Таким образом, вам не нужно запускать контейнер веб-приложения, что может привести к сбою, так как ему нужен какой-то порт (например, вы не можете запустить несколько тестов одновременно).

Постпроцессоры должны быть либо базовыми, либо постпроцессорами DynamicAggregation, которые легко тестировать: сосредоточьтесь на.init и методах оценки, вызванных точечными ILocations. Продвинутые постпроцессоры не могут быть разумно протестированы. Затем я советую писать запросы MDX как можно более простыми, но актуальными с учетом постпроцессора.

Можно использовать любой фреймворк для юнит-тестов и макет. Тем не менее, я советую использовать JUnit и Mockito.

Это очень широкий вопрос. Решение ActivePivot является частью программного обеспечения Java и унаследовано от всех лучших практик, касающихся тестирования и непрерывной сборки программного проекта.

Но вот некоторые основные точки входа ActivePivot:

Как, где и когда писать тесты? Напишите тесты junit, запустите их с maven, настройте непрерывную сборку с Jenkins.

Как встроить (реальный, нетривиальный) экземпляр ActivePivot в модульный тест? Запустите встроенный сервер веб-приложений Jetty. Приложение ActivePivot Sandbox является примером этого (смотрите com.quartetfs.pivot.jettyserver.JettyServer). Если вы хотите, чтобы ряд модульных тестов выполнялся на одном и том же экземпляре ActivePivot, вы можете запустить сервер Jetty статически (например, статическим методом, аннотированным @BeforeClass). В любом случае, не забудьте остановить это в конце тестов.

Как написать тесты производительности? В проекте Sandbox есть небольшой бенчмарк MDX, который называется com.quartetfs.pivot.client.MDXBenchmark. Это легко обогатить и хорошая отправная точка. Существует также com.quartetfs.pivot.client.WebServiceClient, который иллюстрирует подключение к ActivePivot

Как проверить постпроцессоры? Начиная с версии 4.3.5 ActivePivot нет инфраструктуры, предназначенной для изолированного постпроцессорного тестирования. Постпроцессоры тестируются с помощью запросов (запросов MDX или запросов GetAggregates). Конечно, если ваша реализация постпроцессора имеет несколько служебных методов, они могут быть проверены один за другим в стандартных модульных тестах.

Другие вопросы по тегам