[英]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進行測試是集成測試。
有許多測試類型,我看到和實現的最常見的是單元,集成,接受和性能。 所有這些都是有價值的,有不同的優點/缺點 最好是所有類型的質量系統。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.