我是单位测试的新手,我遇到了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;
}
}
答案 0 :(得分:0)
模拟对象实现真实对象的方法。它没有真实对象的字段(即使这些字段是公共的)。