如何使用 jmockit 模拟整个抽象 class 但排除一个或多个应在一个 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的时候遇到了下面的问题
我有一个抽象class,它还有很多具体(非抽象)的实例方法,现在我想写一个JUnit4测试用例来验证抽象的一个非抽象和实例方法class 但模拟 class?
中的所有其他方法
例如:
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 ...");
}
}
对于这个定义的class,我想写一个JUnit4测试用例来验证methodN中的逻辑,所以我想模拟整个class。 (method1和method2,mock或者不mock都可以。)怎么做?
有两种方法:
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();
}};
}
}
请注意,验证实际执行的方法虽然可能,但可能不是一个好主意;最好通过更常规的方式来验证这些方法的作用。
我在使用jmockit的时候遇到了下面的问题
我有一个抽象class,它还有很多具体(非抽象)的实例方法,现在我想写一个JUnit4测试用例来验证抽象的一个非抽象和实例方法class 但模拟 class?
中的所有其他方法例如:
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 ...");
}
}
对于这个定义的class,我想写一个JUnit4测试用例来验证methodN中的逻辑,所以我想模拟整个class。 (method1和method2,mock或者不mock都可以。)怎么做?
有两种方法:
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();
}};
}
}
请注意,验证实际执行的方法虽然可能,但可能不是一个好主意;最好通过更常规的方式来验证这些方法的作用。