繁体   English   中英

定义对公共最终实例变量的期望

[英]Define expectations for public final instance variable

我是单元测试的新手,并且遇到了jMock的问题,我似乎无法弄清楚。 我有一个公共的最终实例变量,需要为它定义一个期望值,但是我无法使其正常工作。 如果我为该变量创建一个吸气剂,它将起作用,但是我宁愿不必为了使单元测试工作而创建一堆吸气剂。 任何有关如何执行此操作的帮助将不胜感激。 这是一些说明我正在尝试做的代码:

public class Main {
    private SimpleObject simpleObject;

    public Main(SimpleObject o){
        this.simpleObject = o;
    }

    public int iDontWork(){
        return simpleObject.myList.size();
    }

    public int iWork(){
        return simpleObject.getMyList().size();
    }
}

我的测试:

@RunWith(JMock.class)
public class MainTest {
    Mockery context = new Mockery() {{
        setImposteriser(ClassImposteriser.INSTANCE);
    }};
    @Mock
    SimpleObject simpleObject;
    private Main main;

    @Before
    public void setup(){
        main = new Main(simpleObject);
    }

    @Test
    public void itWorks() {
        context.checking(new Expectations() {{
            oneOf(simpleObject).getMyList(); 
            will(returnValue(new ArrayList<String>(Arrays.asList("Hey"))));
        }});
        int i = main.iWork();
        assertEquals(1, i);
    }

    @Test
    public void itDoesntWork() {
        context.checking(new Expectations() {{
            oneOf(simpleObject).myList.size(); will(returnValue(1));
        }});
        int i = main.iDontWork();
        assertEquals(1, i);
    }
}

SimpleObject:

public class SimpleObject {
    public final List<String> myList;

    public SimpleObject(){
        myList = Collections.unmodifiableList(Arrays.asList("Hey"));
    }

    public List<String> getMyList(){
        return myList;
    }
}

模拟对象实现了真实对象的方法。 它没有真实对象的字段(即使这些字段是公共的)。

暂无
暂无

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

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