【发布时间】:2025-12-08 19:25:02
【问题描述】:
我有配置文件:
@Configuration
public class UrlAnalyzerConfiguration {
@Bean
@Qualifier("usersDatabase")
public File getUsersDatabaseFile() {
return Paths.get("src/main/resources/database/users.csv").toFile();
}
@Bean
@Qualifier("urlsDatabase")
public File getUrlsDatabaseFile() {
return Paths.get("src/main/resources/database/urls.csv").toFile();
}
}
以及测试配置:
@TestConfiguration
public class TestConfig {
@Bean
@Qualifier("usersDatabase")
public File getUsersDatabaseTestFile() {
return Paths.get("src/test/resources/database/users.csv").toFile();
}
@Bean
@Qualifier("urlsDatabase")
public File getUrlsDatabaseTestFile() {
return Paths.get("src/test/resources/database/urls.csv").toFile();
}
}
我的存储库使用其中一个 bean:
private final File usersDatabase;
@Autowired
public UserRepositoryImpl(@Qualifier("usersDatabase") File usersDatabase) {
this.usersDatabase = usersDatabase;
}
我的存储库测试文件:
@SpringBootTest
@Import(TestConfig.class)
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
// tests here
}
结果我的主程序正常工作,但测试失败,最后显示以下消息:
通过构造函数参数0表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有“java.io.File”类型的合格 bean 可用:预期的单个匹配 bean 但找到了 2:getUsersDatabaseTestFile,getUsersDatabaseFile
我发现了问题:
@TestConfiguration 类用于除了您的应用程序的 初级配置。 这意味着,测试同时使用@Configuration 和@TestConfiguration!但是无论如何,我怎样才能正确使用我的豆子呢?
【问题讨论】:
-
不要使用
File;它在运行时不可用。一般情况下,请改用 SpringResource。 -
@chrylis-cautiouslyoptimistic- 请您提供正确的代码而不是我的代码,或者更准确地解释如何实现您的想法?
-
您在其他地方定义了测试配置吗?看起来您的测试也在读取
UrlAnalyzerConfiguration文件。 -
@RikayanBandyopadhyay 不,我也想过这个,但没有其他地方
-
@chrylis-cautiouslyoptimistic-我曾尝试使用
Resource,但出现同样的错误
标签: java spring spring-boot spring-test