无法使用 JMockit 模拟静态方法
Unable to mock static methods using JMockit
我正在编写一个测试用例,其中包括模拟一个静态方法。虽然没能达到想要的效果。
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import mockit.Mock;
import mockit.MockUp;
import mockit.Mocked;
public class MockSubClassTest {
@Test
public void mockSuperClassTest(@Mocked final SuperClass superClass){
new MockUp<Util>() {
@Mock
public String getAppName(){
return "FXI";
}
};
SubClass subClass = new SubClass("data");
assertEquals("data", subClass.getData());
assertEquals("FXI", subClass.getApp());
}
}
public class SubClass extends SuperClass {
String data;
public SubClass(String string) {
super(string);
data = string;
}
public String getData() {
return data;
}
}
public class SuperClass {
public final static String app = Util.getAppName();
public SuperClass(String data) {
throw new IllegalArgumentException();
}
public String getApp(){
return app;
}
}
public class Util {
public static TestObject getObject() {
// TODO Auto-generated method stub
return null;
}
public static String getAppName() {
// TODO Auto-generated method stub
return null;
}
}
但是在声明 getAppName 时失败了。在上面的代码中,我可以模拟超级 class 构造函数但无法模拟 Util.getAppName().
我是 JMockit 的新手,因此希望得到帮助。
我认为问题在于 SuperClass
是 @Mocked
,因此未应用 MockUp<Util>
。
这按预期工作(更改已注释掉):
public void mockSuperClassTest(/*@Mocked final SuperClass superClass*/) {
//same code here
}
class SuperClass {
public final static String app = Util.getAppName();
public SuperClass(String data) {
//throw new IllegalArgumentException();
}
public String getApp() {
return app;
}
}
我正在编写一个测试用例,其中包括模拟一个静态方法。虽然没能达到想要的效果。
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import mockit.Mock;
import mockit.MockUp;
import mockit.Mocked;
public class MockSubClassTest {
@Test
public void mockSuperClassTest(@Mocked final SuperClass superClass){
new MockUp<Util>() {
@Mock
public String getAppName(){
return "FXI";
}
};
SubClass subClass = new SubClass("data");
assertEquals("data", subClass.getData());
assertEquals("FXI", subClass.getApp());
}
}
public class SubClass extends SuperClass {
String data;
public SubClass(String string) {
super(string);
data = string;
}
public String getData() {
return data;
}
}
public class SuperClass {
public final static String app = Util.getAppName();
public SuperClass(String data) {
throw new IllegalArgumentException();
}
public String getApp(){
return app;
}
}
public class Util {
public static TestObject getObject() {
// TODO Auto-generated method stub
return null;
}
public static String getAppName() {
// TODO Auto-generated method stub
return null;
}
}
但是在声明 getAppName 时失败了。在上面的代码中,我可以模拟超级 class 构造函数但无法模拟 Util.getAppName().
我是 JMockit 的新手,因此希望得到帮助。
我认为问题在于 SuperClass
是 @Mocked
,因此未应用 MockUp<Util>
。
这按预期工作(更改已注释掉):
public void mockSuperClassTest(/*@Mocked final SuperClass superClass*/) {
//same code here
}
class SuperClass {
public final static String app = Util.getAppName();
public SuperClass(String data) {
//throw new IllegalArgumentException();
}
public String getApp() {
return app;
}
}