繁体   English   中英

如何使用jmockit模拟整个抽象类,但排除一个或多个应该在一个JUnit4测试用例中验证的方法?

[英]How to use jmockit to mock a whole abstract class but exclude one or several methods that should be verified within one JUnit4 test case?

使用jmockit时遇到了以下问题。

我有一个抽象类,它还有许多具体的(非抽象的)实例方法,现在我想编写一个JUnit4测试用例来验证抽象类的一个非抽象和实例方法,但是模拟了类中的所有其他方法?

例如:

public class abstract Animal {
    public abstract void abstractMethod1();
    ......
    public abstract void abstractMethodN();

    public void method1() {
      System.out.println("Do something1 ...");
    }

    public void method2() {
      System.out.println("Do something2 ...");
    }

    ......
    public void methodN() {
      method1();
      method2();
      System.out.println("Do somethingN ...");
    }
}

对于这个定义的类,我想编写一个JUnit4测试用例来验证methodN中的逻辑,所以我想模拟整个类。 (对于method1和method2,模拟或不模拟它们,任何一个都可以。)怎么做?

有两种方法:

public class AnimalTest
{
    // Both tested and (partially) mocked:
    @Tested @Mocked Animal animal;

    @Test
    public void testMethodNWhileMockingMethods1And2()
    {
        // Recorded methods will be mocked:
        new Expectations() {{
            animal.method1();
            animal.method2();
        }};

        // Methods not recorded execute normally.
        animal.methodN();
    }

    @Test
    public void testMethodNWhileExecutingMethods1And2AndAlsoVerifyingTheyWereCalled()
    {
        animal.methodN();

        // Executed methods can still be verified:
        new Verifications() {{
            animal.method1();
            animal.method2();
        }};
    }
}

请注意,尽管可能,验证实际执行的方法可能不是一个好主意; 最好通过更常用的方法验证方法的作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM