繁体   English   中英

ActivePivot测试策略

[英]ActivePivot testing strategy

我正在考虑为ActivePivot服务器的不同部分实施自动化测试,最重要的是后处理器。

由于我刚开始,我想更多地了解这个领域的最新技术,最佳实践是什么以及是否有任何需要避免的注意事项。

如果您有任何经验,我将很高兴向您朗读。

干杯,帕斯卡尔

这是一个非常广泛的问题。 ActivePivot解决方案是一个java软件,它继承了有关测试和持续构建软件项目的所有最佳实践。

但这里有一些基本的ActivePivot入口点:

如何,何时何地编写测试? 编写junit测试,使用maven运行它们,使用Jenkins设置连续构建。

如何在单元测试中嵌入(真正的,非平凡的)ActivePivot实例? 启动嵌入式Jetty Web应用程序服务器。 ActivePivot Sandbox应用程序就是一个例子(请参阅com.quartetfs.pivot.jettyserver.JettyServer )。 如果要对同一个ActivePivot实例运行一系列单元测试,可以静态启动Jetty服务器(例如,在使用@BeforeClass注释的静态方法中)。 在任何情况下都不要忘记在测试结束时停止它。

如何编写性能测试? 在Sandbox项目中,有一个名为com.quartetfs.pivot.client.MDXBenchmark的小型MDX基准测试。 它很容易充实,也是一个很好的起点。 还有com.quartetfs.pivot.client.WebServiceClient ,它说明了连接到ActivePivot

如何测试后期处理器? 从ActivePivot版本4.3.5开始,没有专门用于隔离后处理器测试的框架。 后处理器通过查询(MDX查询或GetAggregates查询)进行测试。 当然,如果您的后处理器实现有一些实用方法,那么可以在标准单元测试中逐个测试。

要测试基于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())
}

这样,您不需要启动Web应用程序容器,这可能会失败,因为它需要一些端口可用(意味着您不能同时运行多个测试)。

后处理器应该是Basic或DynamicAggregation后处理器,它易于测试:专注于.init和点ILocations调用的评估方法。 高级后处理器无法进行合理的单元测试。 然后,我建议尽可能简单地编写MDX查询,但考虑到Post-Processor。

可以使用任何单元测试框架和模拟框架。 不过,我建议使用JUnit和Mockito。

我建议使用Spring4JUnit来启动上下文。 然后,您可以自动装配bean并直接访问查询服务和活动数据透视管理器等内容。

@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
}
...

您可以在单独的上下文文件中为测试定义自定义测试属性,例如加载一组测试数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM