当前位置: 首页 > 面试题库 >

如何注入同一接口的多个模拟

沈曜灿
2023-03-14
问题内容

ServiceCaller我要测试的Java类(称为)具有以下功能:

@Autowired @Qualifier(value="serviceA")
SomeService serviceA;

@Autowired @Qualifier(value="serviceB")
SomeService serviceB;

(有一种doWork()方法可以检查条件并调用A或B)。

如何将每个服务的模拟注入适当的变量

我的Junit拥有以下功能:

@InjectMocks ServiceCaller classUnderTest = new ServiceCaller();

@Mock SomeService mockServiceA;
@Mock SomeService mockServiceB;

但是,当我运行测试以检查在正确条件下调用的服务A / B时,由于没有注入模拟,我得到了空指针。

显然是由于对同一接口(SomeService)有多个依赖关系。声明模拟服务时,是否可以指定限定词?还是我需要为依赖项设置setter并设置老式方式?


问题答案:

只需将您的模拟命名为serviceA和serviceB。从Mockito
文档中:

属性设定器注入;模拟将首先按类型解析,然后,如果存在多个相同类型的属性,则按属性名称和模拟名称的匹配进行解析。

在您的示例中:

@InjectMocks ServiceCaller classUnderTest;

@Mock SomeService serviceA;
@Mock SomeService serviceB;

请注意,使用@InjectMocks时不必手动创建类实例。

不过,我个人更喜欢使用构造函数注入依赖项。它使得在测试中注入模拟更加容易(只需使用模拟调用构造函数-
无需反射工具即可@InjectMocks((这很有用,但隐藏了某些方面))。除了使用TDD之外,还清晰可见测试类需要哪些依赖关系,IDE也可以生成构造函数存根。

Spring Framework完全支持构造函数注入:

@Bean
public class ServiceCaller {
    private final SomeService serviceA;
    private final SomeService serviceB;

    @Autowired
    public ServiceCaller(@Qualifier("serviceA") SomeService serviceA,
                         @Qualifier("serviceB") SomeService serviceB) { ... }

    ...
}

可以使用以下代码测试此代码:

@Mock SomeService serviceA;
@Mock SomeService serviceB;

//in a setup or test method
ServiceCaller classUnderTest = new ServiceCaller(serviceA, serviceB);


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

  • spring开发人员的一个问题是: 目录作为父目录 目录-EJB(实现) 目录-API(接口)

  • 看来Guice正在尝试使用不同于预期的创建方法。你知道怎么解决这个问题吗?如有任何指示,将不胜感激! 谢谢!

  • 我的目标是让一系列测试一个接一个地运行。我希望有一个“登录”脚本让用户登录,然后在同一窗口/驱动程序中继续执行以下脚本。我使用的是TestNG,所以我的测试套件设置在TestNG.xml文件中(如果有帮助的话)。 我要运行的下一个脚本:

  • 问题内容: 我有一个React应用,其中有许多导入相同模块的组件。webpack是否为每个请求它的文件导入每个模块一次,从而导致重复的代码(在这种情况下,每个模块仅对两个组件导入两次)?我正在考虑重新编写组件,以便子组件不需要使用React模块,但是也许我正在解决一个不存在的问题。我想避免同一反应模块的多次导入,如果它导致重复的代码。 组件1 组件2导入相同的3个模块。 问题答案: 不能,webp

  • 我有几个EJB3。x无状态会话bean,未定义接口。我需要将这些bean注入到Springbean中,但我无法这样做。 无接口EJB: 我的豆子: 还有我的豆子。xml 在初始化Spring容器时,我得到以下错误: 异常本身非常清楚——spring容器期望MyBean有一个本地接口视图作为其业务接口;但是,我没有(也不能介绍)。 非常感谢您的帮助!