Стратегия тестирования 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). Конечно, если ваша реализация постпроцессора имеет несколько служебных методов, они могут быть проверены один за другим в стандартных модульных тестах.