当前位置: 首页 > 知识库问答 >
问题:

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

冯永长
2023-03-14

我有配置文件:

@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;
    }

我的Repository测试文件:

@SpringBootTest
@Import(TestConfig.class)
public class UserRepositoryTest {
    @Autowired
    private UserRepository userRepository;
    
    // tests here
}

结果,我的主程序工作正常,但测试失败,最后出现以下消息:

通过构造函数参数0表示的未满足的依赖;嵌套异常org.springframework.beans.factory.NoUniqueBean定义异常:没有可用的“java.io.文件”类型的合格bean:预期的单个匹配bean但找到2: getUsersDatabase aseTestFile, getUsersDatabase aseFile

我发现了问题:

@除了应用程序的主配置之外,还使用TestConfiguration类。这意味着,测试同时使用@Configuration和@TestConfiguration!但无论如何,我怎样才能正确使用我的豆子呢?

共有1个答案

乐正光誉
2023-03-14

您可以使用Profile和ActiveProfiles的组合来仅加载测试所需的类。请参见下面的原型。

配置

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

测验

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

工具书类

  1. @简介
 类似资料:
  • 问题内容: 假设我有以下代码: 这段代码运行后,价值会 如果我以相反的顺序替换它们,则会发生类似的问题: 的值将是 我的目标是把成我怎么能做到呢? 问题答案: 使用Apache Commons StringUtils中的方法:

  • 我已经做了一个有效的解决方案,但它很无聊,也很不优雅: 如何使用Regex实现这一点?

  • 问题内容: 假设我们有类似的东西: 我想将“ someText”替换为其他内容。考虑到我不知道someText可能是什么(任何字符串)并且我所知道的是它将被&firstString =和&endString =包围的事实,最佳方法是什么? 编辑:对不起,看起来这还不够清楚。我不知道“ someText”可能是什么,我仅有的信息是它将位于&firstString =和&endString =之间 我

  • 假设我有以下代码: 这段代码运行后,的值将为

  • 本文向大家介绍如何在Java中使用JsonParserSequence顺序合并两个JSON字符串?,包括了如何在Java中使用JsonParserSequence顺序合并两个JSON字符串?的使用技巧和注意事项,需要的朋友参考一下 JsonParserSequence 是一个 可被用于创建包含两个子解析器放置在解析器辅助类 特定序列。我们可以创建一个使用序列静态 方法)createFlattene

  • 我有以下字符串: 我想做的是用另一个字符串替换所有 字符 结果是: 基本上,保持的顺序替换为中的交错字符。 < code>rep的总长度与< code >的总长度相同?,20个字符。 请注意,我不想作为额外的步骤再次手动拆分< code>rep。 我尝试了这个,但失败了: