我正在考虑为ActivePivot服务器的不同部分实现自动化测试,最重要的是后处理器。
由于我还处于起步阶段,我想更多地了解该领域的最新技术,最佳实践是什么,以及是否有任何需要避免的警告。
如果你有任何经验,我将很乐意从你那里读到。
干杯,帕斯卡
发布于 2012-12-05 19:36:57
这是一个非常宽泛的问题。ActivePivot解决方案是一款java软件,它继承了关于软件项目的测试和持续构建的所有最佳实践。
但这里有一些基本的ActivePivot入口点:
编写junit测试,用maven运行它们,用Jenkins设置连续构建。
如何在单元测试中嵌入一个(真实的,非平凡的) ActivePivot实例?启动一个嵌入的Jetty web应用服务器。ActivePivot沙盒应用程序就是一个这样的例子(请看com.quartetfs.pivot.jettyserver.JettyServer)。如果您希望针对同一ActivePivot实例运行一系列单元测试,则可以静态启动Jetty服务器(例如,在带有@BeforeClass注释的静态方法中)。在任何情况下,不要忘记在测试结束时停止它。
如何编写性能测试?在沙盒项目中,有一个名为com.quartetfs.pivot.client.MDXBenchmark的小型基准测试。它很容易丰富,也是一个很好的起点。还有说明如何连接到ActivePivot的com.quartetfs.pivot.client.WebServiceClient
如何测试后处理器?从ActivePivot版本4.3.5开始,没有专门用于独立的后处理器测试的框架。后处理器通过查询(MDX查询或GetAggregates查询)进行测试。当然,如果您的后处理器实现具有一些实用方法,则可以在标准单元测试中逐个测试这些方法。
发布于 2012-12-19 05:17:07
要测试基于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-app容器,这可能会失败,因为它需要一些端口可用(例如,你不能同时运行几个测试)。
后处理器应该是基本的或DynamicAggregation后处理器,它们易于测试:重点关注.init和在点ILocations上调用的评估方法。高级后处理器无法进行合理的单元测试。然后,我建议编写MDX查询尽可能简单,但相关的后处理器。
任何单元测试框架和模拟框架都可以使用。尽管如此,我还是建议使用JUnit和Mockito。
发布于 2013-06-21 18:19:36
我建议使用Spring4JUnit来启动上下文。然后,您可以自动连接bean,并直接访问查询服务和活动的pivot管理器。
@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
}
...您可以在单独的上下文文件中为测试定义自定义测试属性,比如加载一组测试数据。
https://stackoverflow.com/questions/13671177
复制相似问题