簡體   English   中英

在集成測試期間重置Spring-Boot

[英]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方法中的代碼手動打開/關閉異步材料?

看看DirtiesContext

不知道這是您要找的東西。

可能的重復: 測試類弄臟后如何重置Spring JUnit應用程序上下文?

誰啊,我想我是偶然發現的……我現在擁有的是:

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM