我如何使用两个bean(或更多)在主程序中返回字符串,并将它们替换为另外两个,而测试?



我有配置文件:

@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 '的合格bean。2: getUsersDatabaseTestFile,getUsersDatabaseFile


我已经找到了问题:

@TestConfiguration类是在应用程序的类之外使用的主要配置。这意味着测试同时使用@Configuration和@TestConfiguration !但是,无论如何,我怎样才能正确地使用这些bean呢?

您可以使用@Profile@ActiveProfiles的组合来只为您的测试加载所需的类。

配置

@Configuration
@Profile("test")
public class TestOnlyConfigs {
// define beans
}

@ActiveProfiles("test")
public class Tests {
// write tests
}

引用

  1. @Profile
  2. @ActiveProfiles

相关内容

  • 没有找到相关文章

最新更新