簡體   English   中英

服務層測試:使用dbUnit時是否仍然是單元測試而不是模擬本機Spring域層?

[英]Service layer testing: Is it still unit testing when using dbUnit and not mocking a native Spring domain layer?

我有一個服務層和一個域層。 我使用普通的本機Spring存儲庫作為域層,在我的測試設置中,我用dbunit

@Repository
public interface ExampleRepository extends PagingAndSortingRepository<ExampleEntity, Long>, JpaSpecificationExecutor<ExampleEntity> {
}

當然,我將假設Spring存儲庫實現沒有錯誤,因此域層不受測試。

我對單元測試的一般知識是,在為服務層編寫單元測試時,我需要模擬我的域層。

我假設域層不需要進行測試,事實上,我使用dbunit來模擬我的數據庫,我可以使用這個設置來進行服務層的單元測試嗎?

如果我理解正確,在您的測試中,Spring上下文會被提升,您的服務層將與您的域層一起進行測試,並使用DBUnit將數據插入您的測試數據庫中。

有了它,讓我們開始:

我對單元測試的一般知識是,在為服務層編寫單元測試時,我需要模擬我的域層。

如果你想進行單元測試 ,那么這是正確的。 您描述測試的方式,它取決於兩個層是否正確,並且DB必須運行,因此,根據定義,它們是集成測試。

我假設域層不需要進行測試,事實上,我使用dbunit來模擬我的數據庫,我可以使用這個設置來進行服務層的單元測試嗎?

我不會將DBunit稱為數據庫模擬。 它肯定有助於填充數據庫,但仍然需要DB來運行測試,並且將執行您的域層(JPA,Hibernate或任何ORM框架將生成將針對DB執行的SQL)。 如果你真的想要模擬域層和數據庫,那么你應該考慮使用模擬(許多模擬庫可以幫助你)。

至於最后一個問題,如果這個設置適合你的項目,我想它沒關系,但我不會稱之為單元測試 ,而是集成測試 您必須接受,如果您的域層由於某種原因發生變化,它可能會破壞您的服務層測試。

兩種方法都有利弊(單位與整合)。 如果它有助於您以高質量和良好的可維護性來擴展您的項目,那么就沒有“正確”或“錯誤”的方法。

不,使用dbUnit進行測試是集成測試。

  • 單元測試僅涉及測試中的一小部分代碼,模擬任何其他交互。
  • 集成測試涉及具有外部服務的更廣泛的系統范圍,例如使用數據庫服務器測試SQL並使用電子郵件服務器發送電子郵件。 在這兩種情況下,我們使用“測試雙打”而不是真實的生產來驗證系統是否與外部服務正確交互。

有許多測試類型,我看到和實現的最常見的是單元,集成,接受和性能。 所有這些都是有價值的,有不同的優點/缺點 最好是所有類型的質量系統。

暫無
暫無

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

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