[英]Reset Spring-Boot During Integration Tests
我想是想讓一個極端的案例在這里工作。 在我當前的項目中,大約有20個集成測試。 一種新的集成測試需要@EnableAsync
來使測試工作:
@RunWith(SpringRunner.class)
@EnableAsync
@SpringBootTest(webEnvironment = WebEnvironment.NONE)
public class MyITest {
:
}
單獨運行時,此測試可以正常運行。
考慮到Maven和Eclipse在一個項目中執行測試,並且知道該環境僅創建一次並為所有集成測試重新使用(或軟重置),因此一定要先運行此集成測試。 但是,(幾乎?)從來沒有這樣。
因此,此集成測試(幾乎?)總是失敗。 一種顯而易見的解決方案是將@EnableAsync
添加到所有集成測試中。 但是,這是一個不好的依賴關系,我敢打賭,一旦有人添加了另一個集成測試並忘記了這一要求,我就會打破這種依賴關系。
我正在尋找一種方法來強制SpringRunner
完全重置上下文,並通過查看@EnableAsync
真正從頭開始。 理想情況下,該方式還包括在測試之后標記SpringRunner
也必須重置上下文(即,刪除@EnableAsync
)。 這樣,任何執行順序都將確保只有一個測試具有@EnableAsync
。
有沒有辦法做到這一點? 還是可以通過@Before
/ @After
方法中的代碼手動打開/關閉異步材料?
誰啊,我想我是偶然發現的……我現在擁有的是:
@RunWith(SpringRunner.class)
@EnableAsync
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = {
ClassWithAnAutowiredAsyncDependency.class // <=== difference!!! ===>
})
public class MyITest {
:
@Autowired
private ClassWithAnAutowiredAsyncDependency mine;
:
}
似乎是給定的類被重置(特別是?),或者至少自動裝配又在那兒發生了。 我無法解釋任何不同。
我確定該集成測試不是正在運行的第一個集成測試,並且異步位似乎仍然存在。
好吧,測試是綠色的,它可以工作...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.