如何在JMockit中对不可模拟的类型使用Verifications?

时间:2016-03-01 16:05:47

标签: java jmockit

在JMockit中,有些类型是完全不可模拟的(如java.lang.Class),或者是非常糟糕的模拟(如this question中所述的java.lang.Math)。

如何在这些类型上使用验证?以链接问题为例,我如何验证用正确的参数调用Math.pow()

举例来说,即使我拨打Math.pow(),我也会通过此测试,但我会在验证中检查Math.min() - 我怎么能让这次失败?

public class TestTest {

    public static class MyClass {
        public double foo() {
            return Math.pow(2, 3);
        }
    }

    @Tested MyClass mc;
    // @Mocked java.lang.Math math;

    @Test
    public void testCalendar() throws Throwable {
        double d = mc.foo();
        assertThat(d, is(8.0));
        new FullVerificationsInOrder() {{
            Math.min(42.0, 17.0);
        }};
    }
}

将注释掉的行添加到模拟Math中,只会导致依赖于java.lang.Math的类加载器等造成灾难性后果。由于所有方法都是静态的,因此将@Injectable代替@Mocked无效。

那我怎么验证呢?

0 个答案:

没有答案