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

时间:2015-01-18 02:56:32

标签: java unit-testing jmock

我是单位测试的新手,我遇到了jMock的问题,我似乎无法弄明白。我有一个公共最终实例变量,我需要定义一个期望,但我不能让它工作。如果我为变量做一个getter,它可以工作,但我不必创建一堆getter只是为了使单元测试工作。任何有关如何做到这一点的帮助将不胜感激。这里有一些代码说明了我试图做的事情:

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;
    }
}

1 个答案:

答案 0 :(得分:0)

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