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

Java Spring如何模拟实现相同接口的bean

牟波
2023-03-14

我创建了一个bean,如下所示

@Profile({"test", "dev", "int"})
@Bean
public CustomerEmailSenderImpl customerEmailSenderImpl(){
    return new CustomerEmailSenderImpl ();
}

在一个测试类中,我模拟该类如下:

   @ActiveProfiles(profiles = {"test"})
   .....
    @MockBean
    private CustomerEmailSenderImpl customerEmailSenderImpl;
@Profile({"dev", "int"})
@Bean(name = "customerEmailSender")
public CustomerEmailSender customerEmailSenderImpl1(){
    return new CustomerEmailSenderImpl1 ();
}

@Profile({"test"})
@Bean(name = "customerEmailSender")
public CustomerEmailSender customerEmailSenderImpl2(){
    return new CustomerEmailSenderImpl2 ();
}
@ActiveProfiles(profiles = {"test"})
...
@MockBean
private CustomerEmailSender customerEmailSender;

应用程序在没有错误的情况下启动。但是测试并没有模仿bean CustomerEmailSenderImpl2。bean总是被实例化,并执行真正的代码。即使在测试类中从接口到类名的更改也没有帮助:

@MockBean
private CustomerEmailSenderImpl2 customerEmailSenderImpl2;

需要什么来模拟bean CustomerEmailSenderImpl2?

共有1个答案

章涵容
2023-03-14

解决方案是使用@qualifier,然后在测试类中使用qualifier名称作为变量名称。

@Profile({"test"})
@Bean(name = "customerEmailSender")
@Qualifier(value="customerEmailSenderImpl2")
public CustomerEmailSender customerEmailSenderImpl2(){
    return new CustomerEmailSenderImpl2 ();
}



@MockBean
private CustomerEmailSender customerEmailSenderImpl2;
 类似资料:
  • 我尝试对一个包含restclient的服务进行一个简单的测试。看来我没有成功地模仿。看起来代码得到的是真实数据,而不是模拟数据。任何人都可以帮我。 服务本身将如下所示:

  • 我有这个服务接口 我有一个使用这项服务的控制器 在我的单元测试中,我希望能够模拟这个ABC,而不必提供实际的实现。以下是有效的方法: 但我不想做的是

  • 问题内容: 我要测试的Java类(称为)具有以下功能: (有一种方法可以检查条件并调用A或B)。 如何将每个服务的模拟注入适当的变量? 我的Junit拥有以下功能: 但是,当我运行测试以检查在正确条件下调用的服务A / B时,由于没有注入模拟,我得到了空指针。 显然是由于对同一接口()有多个依赖关系。声明模拟服务时,是否可以指定限定词?还是我需要为依赖项设置setter并设置老式方式? 问题答案:

  • 我要测试的Java类(称为)具有以下内容: (有一个方法,它将检查条件并调用a或B)。 显然,这是因为同一个接口()上存在多个依赖关系。在声明模拟服务时,有没有一种方法可以指定限定符?或者我需要为依赖项设置设置器并设置老式的方式吗?

  • 问题内容: 我有以下接口,我想在类中多次实现: 现在,我希望能够通过以下方式实现此接口: 但是,这给了我错误:在行上: 是否可以使用不同的泛型两次实现接口?如果不是,那么我在这里可以做的下一步工作是什么? 问题答案: 您需要使用内部或匿名类。例如:

  • 我有一个叫做InputInterface的接口,它有一些get方法。我还有一个复杂的gui类,它实现了InputInterface,现在因为它太复杂了,无法序列化整个类,而且它扩展并实现了更多的接口,所以我想创建一个类似于模拟对象的东西,它会创建一个类似于我的复杂类目前给出的答案的副本。 我想创建一个实现该接口的类,它将保存这些值,但后来我意识到这应该是EasyMock或其他模拟库的标准过程?这是