![](/img/trans.png)
[英]How can I quickly test dao,service for springboot,junit can't meet my needs
[英]How can I test a service provider implementation module with Junit 5?
這是我的基本模塊,它需要 myspi 包中定義的接口的實現。 各種提供者可以提供 MyProvider 實現。 基本模塊通過 myspi.MyProvider 接口實現使用它們。
module base {
exports myspi;
uses myspi.MyProvider;
}
這是我的示例實現模塊,它通過 MyProviderImpl 提供 MyProvider 實現
module myspi.provider {
provides myspi.MyProvider with myspi.provider.MyProviderImpl;
}
當我在基本模塊中加載實現時,所有這些都可以正常工作,
public static List<MyProvider> getMyProviders() {
var myProviders = new ArrayList<MyProvider>();
for (MyProvider myProvider : ServiceLoader.<MyProvider>load(MyProvider.class)) {
myProviders.add(myProvider);
}
return myProviders;
}
但是相同的代碼在 Junit 5 測試代碼中返回空列表(ServiceLoader 返回 null)。 如何使用 Junit 5 測試服務提供者模塊。或者是否有任何替代 Junit 允許我們創建測試模塊(模塊化測試 API),在模塊信息中聲明“使用 myspi.MyProvider”並與 getMyProviders( )?
基本上,您在正確的道路上。 您需要說服Java模塊系統,當您將模塊解析為測試運行時時,測試模塊才是最重要的。
黑匣子測試很容易。
在模塊化世界中進行白盒測試,這意味着測試模塊中受保護的成員和打包私有成員非常棘手。 至少有兩種方法可以實現此目的:a)使用Java命令行選項在測試啟動時配置Java模塊系統,或b)在編譯時將主要源混合到測試源中,並在您的module-info.java
中維護專用的module-info.java
。 測試源。
請訪問博客和示例發布的鏈接,這些博客和示例發布於如何使用jdk> 1.8進行模塊化構建。為方便起見,摘錄如下:
進行中的藍圖https://github.com/sormuras/sandbox/tree/master/sors-modular-testing-blueprint
在https://github.com/sormuras/junit-platform-maven-plugin/tree/master/src/it上以“ modular-world-”開頭的集成測試
並且希望大多數IDE也不支持您。 目前。
解決了!
我已經將Junit從類路徑刪除到模塊路徑,還刪除了所有Junit 4兼容性東西,例如RunWith()等,並進行了純Junit 5測試。
我添加了一個module-info.java(Junit 5不需要打開模塊,盡管書中講的相反)
在對測試進行模塊化之后,我發現它仍然沒有執行ServiceLoader的東西。 然后,我自己開始尋找故障。
我找到了! 可以在基本模塊中運行ServiceLoader東西,因為基本模塊引用了導出的myProvider.jar,而后者又訪問了同一目錄中的myProvider-config.properties文件。 沒有此配置文件,myProvider將無法正常工作。
另一方面,有問題的測試模塊引用了myProvider的eclipse項目,而不是其導出的.jar文件,因此找不到其配置文件並退出。 我已經將該配置文件從Netbeans移至Eclipse,只需將其復制到同一目錄中即可。 因此缺少配置文件是問題所在。
更改項目設置,我可以毫無問題地運行測試。
我要感謝所有答復的人員。
這是一篇很老的帖子,但如果有人來到這里,gradle mudules 插件會處理一切: https : //github.com/java9-modularity/gradle-modules-plugin
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.