为什么Jmock在期望块中引发异常?

时间:2019-01-14 16:49:00

标签: java unit-testing junit jmock

我正在为具有以下相关结构的方法编写单元测试:

void foo(Obj bar) {
    //...some logic...
    bar.baz();
}

现在,bar.baz()可以引发IOException。如果发生这种情况,则测试将失败。所以我有:

@Test
public void test() {
    ObjectToTest testObj = new ObjectToTest();

    try {
        testObj.foo();
    } catch (IOException e) {
        Assert.fail();
    }
}

此操作失败,并意外调用baz()。好的,所以我有

mockery.checking(new Expectations() {
    {
        try {
            allowing(mockBarInstance).baz();
        } catch (IOException e) {
            Assert.fail();
        }
      }
    });

这当然现在在调用testObj.foo()之前在Test类中调用。

我以为这使我将方法包装在try-catch中(在Expectations中)感到很奇怪,因为这只是设置期望值,不应调用此方法,对吗?

在我的junit报告中,此测试在Expectations的那条线上失败。因此,似乎在这里对其进行了调用。

如果我删除了Expectations中的Assert.fail()并忽略了那里的异常,则通过foo()按预期方式调用baz()时,测试将通过。

所以:

1)为什么要从Expectations块中调用baz()?在这种情况下,它被有效地调用了两次,这看起来很奇怪,我不明白为什么要这么做。

2)为什么我必须在异常块的try-catch中包装baz()?我相信它的目的不是要调用它,而只是说它可以被调用任意次或根本不被调用,而不是实际调用它。因此,在那里应该不可能引发异常。

0 个答案:

没有答案