正确的模拟测试方法

时间:2014-06-09 04:43:27

标签: java unit-testing mockito powermock

在我的代码库中,我有一个像这样的函数

ABCDAO abcDao; 

public A(ABCDAO abcDao) {
   this.abcDao = abcDao;
}

public ABC listABCElement(String arg, boolean withError) {
  return abcDao.getABC(arg, withError);
}

由于DAO连接到Web服务(具有许多配置,很难设置,它肯定需要一些时间来测试,因为它将连接到真实服务器......)并收回结果,我决定使用模拟测试(PowerMockito + Mockito)来测试listABCElement函数。但是,让我们说在进行模拟测试时,我会使用

ABCDDAO abcDao = Mockito.mock(ABCDAO.class);
Mockito.when(abcDao.getABC("", true)).thenReturn(new ABC());
......
assertNotNull(obj.listABCElement("", true));

我觉得它没有任何意义,因为我强迫函数的结果返回一些东西然后测试它是否确实返回任何东西(!?!?!)

在这种情况下进行单元测试的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

你的想法是正确的 - 这样的测试毫无意义。实际上,您正在测试Mockito的广告效果。

在这种情况下,您可能想要做的是流量测试。您的班级A并非真正拥有自己的逻辑,只是委托给ABCDAO - 这正是您想要测试的内容。这样做的方法是模拟ABCDAO(尽管定义此调用的行为是多余的),但不是断言值(正如您所指出的那样毫无意义),您使用{{1} } 验证调用了正确的方法:

Mockito