繁体   English   中英

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM