Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JMockit模拟继承的方法_Java_Junit_Jmockit - Fatal编程技术网

Java 如何使用JMockit模拟继承的方法

Java 如何使用JMockit模拟继承的方法,java,junit,jmockit,Java,Junit,Jmockit,下面是我的代码,我正在为perform方法编写Junit测试用例。我希望方法getList返回虚拟值,因为DB不可用。请建议我如何使用JMockit做同样的事情 class BaseClass { public List<> getList() { return DataBase.getList(); } } class ChildClass extends BaseClass { public boolean perform(String

下面是我的代码,我正在为perform方法编写Junit测试用例。我希望方法getList返回虚拟值,因为DB不可用。请建议我如何使用JMockit做同样的事情

class BaseClass {

  public List<> getList() {
      return DataBase.getList();       
  }
}

class ChildClass extends BaseClass {

  public boolean perform(String temp) {
     boolean bool=true;
     List list = getList();
     for(String str:list){
           if(str.equals(temp);
               bool=false;
           break;
     }
     return bool;
  }
}
类基类{
公共列表getList(){
返回DataBase.getList();
}
}
类ChildClass扩展了基类{
公共布尔执行(字符串临时){
布尔布尔布尔=真;
List=getList();
for(字符串str:list){
如果(str)等于(temp);
布尔=假;
打破
}
返回布尔;
}
}

只要
ChildClass
不覆盖
BaseClass::getList()
您就必须模拟
BaseClass::getList()

新模型(){
@嘲弄
List getList(){
返回新的ArrayList();//此处是您的模拟
}
}
应该模拟的不是
基类#getList()
,而是
数据库#getList()

公共类示例测试{
@被测儿童级切割;
@试验
public void findItemList(@Mocked DataBase db){
List=Arrays.asList(“Abc”、“test”、“def”);
新期望(){{DataBase.getList();result=list;}};
布尔itemNotFound=cut.perform(“test”);
assertFalse(itemNotFound);
}
}

模拟
BaseClass#getList()
需要部分模拟,这可以通过
newexpectations(cut){{cut.getList();result=list;}}
。但是部分模拟是一种已知的糟糕的测试实践,应该避免。

我不再使用JMockit,转而使用Mockito。使用@Mock annotation可以解决上述问题。您可能是指
@Spy
注释。但是JMockit测试更简单。@user1520277——如果您不再关心您的问题的话,并且您没有将任何答案标记为有用,您是否可以删除它而不是将其保留为未回答?
new MockUp<BaseClass>() {
    @Mock
    List<> getList() {
        return new ArrayList(); // your mock here
    }
 }
public class ExampleTest {
    @Tested ChildClass cut;

    @Test
    public void findItemInList(@Mocked DataBase db) {
        List<String> list = Arrays.asList("Abc", "test", "def");
        new Expectations() {{ DataBase.getList(); result = list; }};

        boolean itemNotFound = cut.perform("test");

        assertFalse(itemNotFound);
    }
}