首页 > 解决方案 > 测试从其他类创建对象的类

问题描述

我有一个类Component,它从其他类创建两个对象JMSConnectorAppiaConnector链接它们。

我有一个方法可以读取两个对象的状态并返回一个组合值。

这是代码: 在此处输入图像描述

在此处输入图像描述

测试此方法时我面临的问题是我无法注入模拟appiaConnectorjmsConnector测试此方法的行为。

例如我试过这个:

@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());
    }
}

有没有办法可以实现这一点,或者我应该使用存根?(对于这么小的方法来说,这似乎有点过头了)

标签: junitjava-8mockito

解决方案


您可以将它们作为参数传递,而不是在方法中创建它们。

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
}

推荐阅读