无法使用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时,它是失败的。在上面的代码中,我能够模拟超级类构造函数,但无法模拟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;
  }
}

最新更新