![](/img/trans.png)
[英]How to using function postgres in UnitTest when using spring boot
[英]Spring boot unittest gives NoClassDefFoundError when using ClassPathScanningCandidateComponentProvider
我有一個帶有自定義過濾器FilterRegistrationBean的Spring-boot應用程序。
創建此過濾器時,在bean實例化期間,我嘗試使用一些代碼在類路徑中搜索特定類型的所有注釋。
ClassPathScanningCandidateComponentProvider provider = createComponentScanner();
provider.findCandidateComponents("").stream()...
對findCandidateComponents的調用將引發NoClassDefFoundError。
該應用程序在正常運行期間可以運行,但是在單元測試中失敗。 我的測試課像:
@RunWith(SpringRunner.class)
@SpringBootTest
public class YadaYadaApplicationTests
{
@Test
public void contextLoads()
{
}
}
如果我注釋掉“ @SpringBootTest”,我可以正常運行。
我想這是因為在運行單元測試時,類路徑與我單獨運行應用程序時的類路徑不同。
這些是我的依賴項:
implementation('org.springframework.boot:spring-boot-starter-web')
testImplementation('org.springframework.boot:spring-boot-starter-test')
我該怎么解決?
找到了解決方案。
顯然,“ org.springframework.boot:spring-boot-starter-test”需要更多的依賴關系,這些依賴關系不是可傳遞的。
猜測原因可能是我使用ClassPathScanningCandidateComponentProvider手動掃描了類路徑,這將加載依賴類,而不是類路徑。
添加以下內容可以解決我的問題:
的build.gradle:
testImplementation('org.springframework.boot:spring-boot-starter-jdbc')
testImplementation('org.apache.derby:derby')
application.properties:
spring.datasource.driver-class-name=org.apache.derby.jdbc.EmbeddedDriver
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.