加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Mockito – 感觉我没有充分利用它的潜力

发布时间:2020-12-14 05:45:33 所属栏目:Java 来源:网络整理
导读:使用Mockito时,我只使用它来模拟依赖关系,即我的工作流看起来大概如下: 我有一个依赖的类: public class C { public C (A a,B b) { this.a = a; this.b = b; } public String fooBar() { return a.foo() + b.bar(); }} 在我的测试类中,我模拟了这些依赖项,
使用Mockito时,我只使用它来模拟依赖关系,即我的工作流看起来大概如下:

我有一个依赖的类:

public class C {
    public C (A a,B b) {
        this.a = a;
        this.b = b;
    }

    public String fooBar() {
        return a.foo() + b.bar();
    }
}

在我的测试类中,我模拟了这些依赖项,并告诉它们在调用某些指定方法时返回哪些值:

public class CSpec {
    private A a = mock(A.class);
    private B b = mock(B.class);

    @Test
    public itShouldReturnFooBar() {
        when(a.foo()).thenReturn("foo");
        when(b.bar()).thenReturn("bar");

        C c = new C(a,b);

        assertThat(c.fooBar().isEqualTo("foobar"));
    }
}

(我希望这个例子不是太简单或太衍生;-)).这很好用,它允许我单独测试类(这里:C).尽管如此,我从不使用Mockito的验证方法或其他任何功能.以这种方式使用Mockito可以/足够吗?

解决方法

验证通常用于检查您的C是否真正调用A.foo()和B.bar()方法.所以你可以添加
verify(a).foo();
verify(b).foo();

在断言之前或之后.我不认为您需要或应该在这里使用它们,但有几种情况您需要:

> a或b执行c的公共API不可见/可访问的内容(例如日志记录)>您关注的是执行顺序>你想确保只调用a.foo和b.bar方法,而不是像a.foo2那样>你可以使用那些模拟作为间谍,然后调用a.foo然后将路由到aReal.foo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读