Я новичок в модульном тестировании, и я столкнулся с проблемой jMock, которую я не могу понять. У меня есть общедоступная переменная конечного экземпляра, которую мне нужно определить для ожидания, но я не могу заставить ее работать. Если я создаю геттер для переменной, он работает, но я бы предпочел не создавать кучу геттеров, просто чтобы выполнить модульное тестирование. Любая помощь в том, как это сделать, будет высоко оценена. Вот некоторый код illustraiting то, что я пытаюсь сделать:Определите ожидания для публичной переменной конечного экземпляра
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;
}
}
Ум, где эта публичная переменная конечного экземпляра, о которой вы говорите? Я никого не вижу. Кроме того, традиционно создавать геттеры в любом случае, потому что множество автоматизированных инструментов сканирует геттеры, чтобы узнать, какие поля есть у объекта. Возможно, посмотрите на Groovy, который автоматически их создает для вас? – chrylis
А, я думаю, вы говорите о 'SimpleObject'. Согласие иметь этих геттеров. – chrylis
Действительно? Некоторые проекты с открытым исходным кодом [не согласны] (http://wiki.apache.org/cassandra/CodeStyle): «Предпочитайте публичные конечные поля для частных полей с помощью геттеров». – taylordurden