我正在考慮爲ActivePivot服務器的不同部分以及最重要的後處理器實施自動化測試。ActivePivot測試策略
由於我在開始的時候,我想更多地瞭解藝術在這一領域的國家,什麼是最好的做法,如果有什麼注意事項,以避免。
如果您有任何經驗,我會很樂意爲您解讀。
乾杯, 帕斯卡爾
我正在考慮爲ActivePivot服務器的不同部分以及最重要的後處理器實施自動化測試。ActivePivot測試策略
由於我在開始的時候,我想更多地瞭解藝術在這一領域的國家,什麼是最好的做法,如果有什麼注意事項,以避免。
如果您有任何經驗,我會很樂意爲您解讀。
乾杯, 帕斯卡爾
這是一個很廣泛的問題。 ActivePivot解決方案是一款Java軟件,並繼承了有關軟件項目測試和持續構建的所有最佳實踐。
但這裏有一些基本的ActivePivot切入點:
如何,何時何地寫測試? 編寫junit測試,用maven運行它們,用Jenkins設置連續編譯。
如何embbed一個(真實的,不平凡)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查詢儘可能簡單,但考慮到後處理器的相關性。
可以使用任何單元測試框架和模擬框架。不過,我建議使用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
}
...
您可以在一個單獨的上下文文件測試定義自定義測試屬性,說用於裝載一組測試數據。