junit - 测试从其他类创建对象的类
问题描述
我有一个类Component
,它从其他类创建两个对象JMSConnector
并AppiaConnector
链接它们。
我有一个方法可以读取两个对象的状态并返回一个组合值。
测试此方法时我面临的问题是我无法注入模拟appiaConnector
并jmsConnector
测试此方法的行为。
例如我试过这个:
@RunWith(MockitoJUnitRunner.class)
public class ComponentTest {
@Mock
JMSConnector jmsConnector;
@Mock
AppiaConnector appiaConnector;
Component component = new Component();
@Test
public void testGetStatus() {
given(jmsConnector.getStatus()).willReturn(true);
given(appiaConnector.getStatus()).willReturn(true);
// this is what I want... but I can't dynamically inject these mocks into component ???
assertTrue(component.getStatus());
}
}
有没有办法可以实现这一点,或者我应该使用存根?(对于这么小的方法来说,这似乎有点过头了)
解决方案
您可以将它们作为参数传递,而不是在方法中创建它们。
public Component(AppiaConnector appiaConnector, JMSConnector jmsConnector) {
// do your status check
}
现在,如果在您的生产代码中,您不想注入它们,您总是可以创建另一个不带参数的构造函数。这样,您可以保持代码不变,但获得测试灵活性
public Component() {
this(new AppiaConnector(), new JMSConnector());
}
Component(AppiaConnector appiaConnector, JMSConnector jmsConnector) {
// do your status check
}
推荐阅读
- xml - 如何使用 Java 中的 Jaxb2Marshaller 在最终 XML 中禁用 xmlns targetNamespace
- qml - 如何在 Cpp 中为 Qml 制作打印助手
- android - 标记在 Android 的警报日志中意味着什么?
- asp.net - 三位小数在数据集中显示为 4 位小数
- android - 在 Android 上发布 React Native 项目时出现“应用程序已停止”错误
- java - 生成图表时文件数据解析不完整
- php - 我正在使用 NelmioApiDocBundle 来记录我的 API。如何在注释中强制执行验证?
- javascript - Ant Design 组件 initialValue 不适用于 validateFields
- javascript - 这个类的语法是否正确,不正确,脚本错误。(:第 0 行)(javascript p5.js)
- c# - 从另一个应用程序启动时,Xaml 中 ListBox 中的滚动条的行为不同