已经提出了很多问题,但对于我的具体情况没有真正有用的信息。
我想测试一个方法,它在A类中,它是一个void,它从类B调用一些方法,然后修改或检查它的字段 - 多个。
以下是一个例子:
public class A {
private B b;
public A(B b){
this.b = b;
}
public void checkStageOne(Worksheet ws){
if( long statement){
if(B.checkStorage(ws)){
ws.setThing("Nasty");
}
else { ws.setStatus("Not so nasty"); }
}
}
让我们说LinkedLists以某种方式填满。 A类checkStageOne()的参数包含在B类的列表中。
public class B {
private LinkedList<Worksheet> sheetList = new LinkedList<>();
private LinkedList<UsedParts> upList = new LinkedList<>();
private LinkedList<UsedParts> matList = new LinkedList<>();
public boolean checkStorage(int id){
for(UsedParts up : upList){
if(up.getSheetID()== id){
for(Material mat : matList){
if(up.getMatID() == mat.getMatID()){
if(mat.getQuantity() - up.getQuantityNeeded() < 0){
return false;
}
}
}
}
}
return true;
}
我想模仿B类,但我完全不知道如何伪造B的字段然后测试结果。我所知道的是我可以使用EasyMock.expectLastCall()来测试空白;但后来我需要检查它是否真的与断言有关。
你有什么建议吗?
VBR, assaultpig
答案 0 :(得分:0)
要回答您的评论,您可以使用EasyMock执行相同的操作。
但我想嘲笑B,那么,那不是你应该做的。只是模仿B
。然后,您只关心checkStorage
返回true
或false
来测试A
。
这样的事情:
B b = mock(B.class);
Worksheet ws = mock(Worksheet.class);
A a = new A(b);
expect(b.checkStorage()).andReturn(true); // expect one call to checkStorage to return true
ws.setThing("Nasty"); // expect setThing to be called
replay(b, ws);
a.checkStageOne(ws); // will call checkStorage that will return true
verify(b, ws); // will make sure setThing was called