[英]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.