Mockito - 访问私有/自动装配的字段以进行验证()

时间:2015-10-19 13:38:32

标签: spring testing mocking mockito facade

所以我是Mockito新手测试外墙。所以基本上我想检查,如果一个服务方法被调用一次。

这是一个简化的例子

我的服务

public class Service {
    public int myMethod(int index, int number) {
        if (index<4){
            index = index + number;
        }
        return index;
    }
}

我的立面:

public class Facade {

    private Service service;

    public void method(){
        int i = service.myMethod(4, 2);
    }

}

最后我的测试:

public class FacadeTest {
    @InjectMocks
    private Facade classUnderTest;

    @Mock (name="service")
    private Service service;

    @Before
    public void setUp(){
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void test(){
        verify(classUnderTest, times(1)).service.myMethod(4,2);
    }
}

我知道可以在我的Facade中使用Getter / Setter方法来返回服务,但我想这样做,而不是这样做。

是否有可能以我想要的方式,不对Facade进行任何更改?

当我有一个Spring项目并在Facade中使用@Autowired作为服务变量时,是否有区别?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用@InjectMocks将在您的外观中注入带注释的@Mock服务。 因此,您不需要任何吸气剂或固定剂进行测试。

您似乎忘了在测试中调用方法。 试试这个:

@Test
public void test(){
    classUnderTest.method();
    verify(service, times(1)).service.myMethod(4,2);
}

在您的外观中使用@Autowired服务对您的测试没有影响,因为它没有使用spring。当你运行你的应用程序时,Spring会注入正确的bean。