我有Spring引導應用程序。我使用Junit + Mockito進行單元測試。所有的測試用例都是用Java編寫的。我最近決定使用Groovy編寫測試用例,儘管應用程序代碼將保留在Java中。Junit使用groovy預期的例外
我在測試預期的異常時遇到了一個奇怪的場景。
方案1:試驗預期的異常使用JUnit + Groovy的(無shouldFail):
@Test(expected = NoResultException.class)
void testFetchAllNoResultsReturned() throws Exception {
List<Name> namesLocal = null;
when(Service.fetchAllNames(id)).thenThrow(
new NoResultException(""))
namesLocal = (service.fetchAllNames(id)
assert(namesLocal==null)
verify(service, times(1)).fetchAllNames(id)
}
按照上面的測試情況下,service.fetchAllNames呼叫應該丟一個NoResultException。這方面的測試似乎運作良好。然而,斷言和驗證之後,不被稱爲。只要遇到異常,方法執行就會停止。不過,我之前用Java編寫的測試案例工作得很好。這個問題只有在我切換到Groovy後纔會發生。
做了一些谷歌搜索後,我發現有一個叫shouldFail由可用於這種情況下按本link的GroovyTestCase類提供的方法。它確實解決了我的問題。
情景2:測試預期的異常使用JUnit +的Groovy(帶shouldFail):
@Test
void testFetchAllNoResultsReturned() throws Exception {
List<Name> namesLocal = null;
when(Service.fetchAllNames(id)).thenThrow(
new NoResultException(""))
shouldFail(NoResultException.class) {
namesLocal = (Service.fetchAllNames(id)
}
assert(namesLocal==null)
verify(Service, times(1)).fetchAllNames(id)
}
我的疑問是,這是它是如何工作的還是我失去了一些東西。如果這是它應該如何工作的,Groovy是否有這樣的理由?我試圖在互聯網上尋找原因,但我無法獲得許多線索。
請注意,在OP的第二個片段中不需要'namesLocal'字段 – NamshubWriter