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有一个本地接口视图作为其业务接口;但是,我没有(也不能介绍)。 非常感谢您的帮助!