测试中的部分模拟类

wmtdaxz3  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(330)

我希望模拟一个支持类的静态方法,为了做到这一点,我需要使用jmockit模拟被测类的方法。在下面的例子中,我想模拟cancontinue方法,以便始终进入if条件。我还需要模拟静态方法并验证之后发生的所有事情。

public class UnitToTest {

    public void execute() {

        Foo foo = //
        Bar bar = //

        if (canContinue(foo, bar)) {
            Support.runStaticMethod(f);
            // Do other stuff here that I would like to verify 
        }
    }

    public boolean canContinue(Foo f, Bar b) {
        //Logic which returns boolean
    }   
}

我的测试方法如下:

@Test
public void testExecuteMethod() {

    // I would expect any invocations of the canContinue method to 
    // always return true for the duration of the test
    new NonStrictExpectations(classToTest) {{
        invoke(classToTest, "canContinue" , new Foo(), new Bar());
        result = true;
    }};

    // I would assume that all invocations of the static method
    // runStaticMethod return true for the duration of the test
    new NonStrictExpectations(Support.class) {{
        Support.runStaticMethod(new Foo());
        result = true;
    }};

    new UnitToTest().execute();

    //Verify change in state after running execute() method
}

我做错什么了?将cancontinue方法的第一个期望值更改为返回false不会影响代码的执行是否进入if条件。

3gtaxfhh

3gtaxfhh1#

你在嘲笑一个例子( classToTest ),然后再进行一次锻炼( new UnitToTest().execute() )不被嘲笑;这是一个错误。
另外,测试不应该使用 invoke(..."canContinue"...) ,自从 canContinue 方法是 public . 但实际上,这种方法根本不应该被嘲笑;测试应该准备好任何需要的状态,以便 canContinue(foo, bar) 返回所需的值。

相关问题