繁体   English   中英

测试修改模拟类字段的方法

[英]Testing a method which modifies the field of the mocked class

已经问了很多问题,但是对于我的特定案例没有真正有用的信息。

我想测试一个方法,该方法位于类A中,并且为空,它从类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,突袭猪

为了回答您的评论,您可以使用EasyMock执行相同的操作。

但是我想嘲笑B,那不是你应该做的。 只是嘲笑B 然后,您只关心checkStorage返回truefalse来测试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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM