Junit 从其他类创建对象的测试类
我有一个类Junit 从其他类创建对象的测试类,junit,java-8,mockito,Junit,Java 8,Mockito,我有一个类组件,它从其他类JMSConnector和AppiaConnector创建两个对象,并将它们链接起来 我有一个方法,可以读取两个对象的状态并返回一个组合值 代码如下: 测试此方法时我面临的问题是,我无法注入appiaConnector和jmsConnector的模拟来测试此方法的行为 例如,我尝试了以下方法: @RunWith(MockitoJUnitRunner.class) public class ComponentTest { @Mock JMSConne
组件
,它从其他类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组件(AppiaConnector AppiaConnector,JMSConnector JMSConnector){
//检查你的状态
}
现在,如果您不想在生产代码中注入它们,您可以始终创建另一个不带参数的构造函数。这样,您可以保持代码不变,但可以获得测试灵活性
公共部分(){
这(新的AppIconnector(),新的JMSConnector());
}
组件(AppiaConnector AppiaConnector、JMSConnector JMSConnector){
//检查你的状态
}
你说的很对,我已经考虑过了。但是在我看来,仅仅为了单元测试而有一个额外的构造函数是没有必要的。这就是为什么我选择了另一种解决方案。我对这个职业很陌生。如果我错了,请纠正我(我的观点)。仅仅为了单元测试而有一个额外的构造函数是不必要的
-我不同意这一点。我经常使用测试驱动开发,对我来说,测试是代码中的头等公民,让代码可测试对我来说很重要我知道有些人不喜欢这个额外的构造函数,但到目前为止,我唯一的论点是我们不应该为测试添加代码,这是一个相当模糊和抽象的论点所以,如果你不想要它,你并不孤单,但是如果你真的想知道为什么你不想要它,你可能找不到强有力的理由反对它