我有以下代码
Class A {
public boolean showData() {
NewData data = getNewData();
if (data!=null) {
return true;
} else {
return false;
}
}
public NewData getNewData () {
return NewData = abc;
}
}
当我调用showData()时,我需要模拟getNewData来返回模拟数据。
要清楚,
如果我像下面那样模拟getNewData,
when(a.getNewData()).thenReturn(null);
assertFalse(showData()) // this doesn't work because the mocked internal getNewdata is not used.
有办法解决这个问题吗?
答案 0 :(得分:1)
假设你想测试A.showdata,你可以从A派生一个覆盖getNewData的类,它返回你需要测试的东西。这是一种被称为“子类和覆盖”的技术。
编辑:在伪代码中,您执行以下操作:
Class B: public A {
public NewData getNewData () {
return <whatever you need for your test>
}
}
现在,要测试A.showData,请执行以下操作:
B mySut = new B();
Bool result = mySut.showData(); // this calls A.showData, which calls B.getNewData.
答案 1 :(得分:0)
最好的方法是将NewData作为参数
注入方法showData(data)并使用调用showData的类/方法使用getNewData()
在模拟时,依赖注入是问题的一般答案(根据我的经验)。这允许您传入您希望方法使用的确切NewData,因此模拟。