当前位置:  开发笔记 > 编程语言 > 正文

是否可以使用Mockito验证测试的对象方法调用?

如何解决《是否可以使用Mockito验证测试的对象方法调用?》经验,为你挑选了1个好方法。

我有一些业务逻辑类:

public class SomeService {
    public void doFirst() {}

    public void doSecond() {
        doFirst();
    }
}

并测试它:

public class SomeServiceTest {

    private SomeService service;

    @Before
    public void setUp() {
        service = new SomeService();
    }

    @Test
    public void doSecond_someCondition_shouldCallFirst() {

        // given
        ...

        // when
        service.doSecond();

        //then
        how to verify doFirst() was called? 
    }
}

如何验证doFirst()不是在模拟上调用,而是在实际服务中调用?



1> Gerald Mücke..:

我想知道你为什么要测试,你的测试方法调用什么方法.听起来很像白盒测试对我来说.

在我看来,你想要验证调用的结果而不是到达那里的方式,因为这可能很容易改变(即重构时).

因此,如果doSecond()的结果与doFirst()相同,则可以为doFirst()编写测试并使用相同的测试(即断言集)来测试doSecond().

但是如果你真的想测试,doSeirst()是否已被doSecond()调用,你可以将你的服务包装在间谍中,然后在间谍上调用验证:

//given
SomeService service = new SomeService();
SomeService spy = Mockito.spy(service);
//when
spy.doSecond();
//then
verify(spy).doFirst();

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有