簡體   English   中英

最好在Spring測試類中使用@Autowired還是new?

[英]Better to use @Autowired or new in Spring test class?

我在為春季應用程序編寫單元測試時遇到一些麻煩,想知道這個問題。

讓我們來看下面的例子:

@SpringBootTest
@RunWith(SpringRunner.class)
public class AlbumDTOConverterTest {

    @Autowired
    private AlbumDTOConverter albumDTOConverter;

    @Test
    public void ToEntity_ReturnValue_NotNull() {
        AlbumDTO albumDTO = new AlbumDTO("Summer album", new Date(), "This summer, we have made some wonderfull photos. Have a look!", null);
        assertNotNull(albumDTOConverter.toEntity(albumDTO));
    }
}

為了使@Autowired正常工作,我正在啟動一個容器,並使用@SpringBootTest注釋測試類。

問題是我認為我做錯了。 在我看來,我寧願只使用new運算符而不是使用Spring的IoD來創建AlbumDTOConverter的新instance

你們對此怎么看?

對於單元測試,您不需要整個容器即可啟動。 根據定義,此類單元應單獨進行測試。 使用new關鍵字創建類的實例非常好。 即使該類依賴於其他類,也可以手動創建它們並將其傳遞給該類的適當構造函數。

請注意, 單位與類不同 單位的術語在開發人員,尤其是初學者中通常很困惑。 您不必在單元測試中依賴於依賴項注入。 容器只會增加執行測試所需的時間,執行時間長是開發人員避免頻繁運行它們的主要原因。 手動為要測試的單元構建依賴關系樹沒有錯。

從長遠來看,為不同的測試創建類似的輸入可能會導致測試代碼重復,但是幸運的是,針對此問題有最佳實踐,例如共享夾具

如果要進行單元測試,則不應每次都使用@Autowire。

基本單元測試說:“單元測試負責測試一段特定的代碼,只是代碼的一小部分功能(單元)”

現在的問題是何時使用彈簧功能?

有時,您需要依賴於Spring框架進行一些單元測試,例如Web服務調用,存儲庫調用等。例如,如果您的存儲庫具有使用@Query批注的自定義查詢,則可能需要測試查詢。 另外,如果要序列化/反序列化對象,則需要確保對象映射正在工作。 當您進行一些參數驗證或錯誤處理時,您可能還想測試您的控制器。 如何確定正確使用Spring? 在這些情況下,您可以利用新的Spring Boot的測試注釋。

我認為這會帶來更好的主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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