如何从Jmokit 1.49版本模拟私有方法

问题描述

我正在使用Junit 3.8.1,并将Jmokit更新为1.49

我有一个项目,其中的现有测试与MockUp一起提供。嘲笑私有方法。将Jmockit jar更新到1.49版本后,出现以下错误

java.lang.IllegalArgumentException: Unsupported fake for private method

我要测试的Java类是

public class Foo {

String aVar;

public Foo(String str) {
    aVar = str;
}

private void concatStr(String append) {
    aVar = aVar.concat(append);
}

public void doSomeTask() {
    concatStr("Test");
}
}

测试类是

public class FooTest extends TestCase {
public FooTest(String testName) {
    super(testName);
}

public static Test suite() {
    return new TestSuite(FooTest.class);
}

public void test() {
    new MockUp<Foo>() {
        @Mock
        private void concatStr(String append) {
            Assert.assertEquals("Test",append);
        }
    };

    Foo foo = new Foo("demoString");
    foo.doSomeTask();
}
}

在控制台上出现如下错误

[INFO] Running org.test.jmokitupdate.FooTest
[ERROR] Tests run: 1,Failures: 0,Errors: 1,Skipped: 0,Time elapsed: 0.028 s <<< FAILURE! - in 
org.test.jmokitupdate.FooTest
[ERROR] test(org.test.jmokitupdate.FooTest)  Time elapsed: 0.025 s  <<< ERROR!
java.lang.IllegalArgumentException: Unsupported fake for private method 
Foo#concatStr(Ljava/lang/String;)V found
    at mockit.internal.faking.FakedClassModifier.visitMethod(FakedClassModifier.java:96)
    at mockit.asm.methods.MethodReader.readMethodBody(MethodReader.java:118)
    at mockit.asm.methods.MethodReader.readMethod(MethodReader.java:75)
    at mockit.asm.methods.MethodReader.readMethods(MethodReader.java:62)
    at mockit.asm.classes.ClassReader.readFieldsAndMethods(ClassReader.java:196)
    at mockit.asm.classes.ClassReader.accept(ClassReader.java:89)
    at mockit.internal.faking.FakeClassSetup.modifyRealClass(FakeClassSetup.java:80)
    at mockit.internal.faking.FakeClassSetup.redefineMethods(FakeClassSetup.java:61)
    at mockit.MockUp.redefineClass(MockUp.java:114)
    at mockit.MockUp.<init>(MockUp.java:78)
    at org.test.jmokitupdate.FooTest$1.<init>(FooTest.java:31)
    at org.test.jmokitupdate.FooTest.test(FooTest.java:31)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)