我要测试的Java类(称为ServiceCaller
)具有以下内容:
@Autowired @Qualifier(value="serviceA")
SomeService serviceA;
@Autowired @Qualifier(value="serviceB")
SomeService serviceB;
(有一个doWork()
方法,它将检查条件并调用a或B)。
@InjectMocks ServiceCaller classUnderTest = new ServiceCaller();
@Mock SomeService mockServiceA;
@Mock SomeService mockServiceB;
显然,这是因为同一个接口(someService
)上存在多个依赖关系。在声明模拟服务时,有没有一种方法可以指定限定符?或者我需要为依赖项设置设置器并设置老式的方式吗?
将您的模拟命名为serviceA和serviceB就足够了。来自Mockito文档:
属性设置器注入;模拟将首先按类型解析,然后,如果有几个相同类型的属性,则按属性名和模拟名的匹配进行解析。
在您的示例中:
@InjectMocks ServiceCaller classUnderTest;
@Mock SomeService serviceA;
@Mock SomeService serviceB;
注意,使用@InjectMocks时不需要手动创建类实例。
然而,我个人更喜欢使用构造函数注入依赖项。它使得在测试中注入模拟更加容易(只需使用模拟调用构造函数--不需要反射工具或@injectmocks
(这很有用,但隐藏了一些方面))。此外,使用TDD可以清楚地看到测试类需要什么依赖关系,并且IDE可以生成构造函数存根。
Spring框架完全支持构造函数注入:
@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有一个本地接口视图作为其业务接口;但是,我没有(也不能介绍)。 非常感谢您的帮助!