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

时间:2016-08-16 16:06:59

标签: java junit jmockit

下面是我的代码,我正在为方法执行编写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;
  }
}

2 个答案:

答案 0 :(得分:1)

不应该嘲笑BaseClass#getList(),而是DataBase#getList()

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);
    }
}

模拟BaseClass#getList()需要部分模拟,可以使用new Expectations(cut) {{ cut.getList(); result = list; }}完成。但部分嘲笑是一种应该避免的已知不良测试实践。

答案 1 :(得分:0)

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

new MockUp<BaseClass>() {
    @Mock
    List<> getList() {
        return new ArrayList(); // your mock here
    }
 }