Say в основном коде, у вас есть что-то вроде этого:Резервные методы через несколько тестов блок/классов
MyClass.java
public class MyClass {
public List<Obj1> create(List<ObjA> list) {
return (new MyClassCreator()).create(list);
}
// Similar methods for other CRUD operations
}
MyClassCreator.java
public class MyClassCreator {
Obj1Maker obj1Maker = new Obj1Maker();
public List<Obj1> create(List<ObjA> list) {
List<Obj1> converted = new List<Obj1>();
for(ObjA objA : list)
converted.add(obj1Maker.convert(objA));
return converted;
}
}
Obj1Maker.java
public class Obj1Maker {
public Obj1 convert(ObjA objA) {
Obj1 obj1 = new Obj1();
obj1.setProp(formatObjAProperty(objA));
return obj1;
}
private String formatObjAProperty(ObjA objA) {
// get objA prop and do some manipulation on it
}
}
Предположим, что тестовый модуль для Obj1Maker уже сделано, и включает в себя метод makeObjAMock()
, который издевается комплекс объектов А.
Мои вопросы:
для модульного тестирования MyClassCreator, как бы я тест
create(List<ObjA> list)
? Весь метод действительно делегирует преобразование сObjA
вObj1
и запускает его в цикле. Само преобразование уже протестировано. Если бы я должен был создать списокObjA
и протестировал каждый объект в спискеObj1
, я вернусь, мне нужно было бы скопировать в модульный тест MyClassCreator. Очевидно, что это будет повторяющийся код, так что используетverify()
для обеспечения того, чтобы создать (список списка)?Для модульных испытаний MyClass, опять же, его метод
create(List<ObjA>)
просто делегирует операцию MyClassCreator. Действительно ли мне нужно протестировать это с помощью полных тестовых примеров, или я должен просто проверить, вызван ли метод MyClassCreatorcreate
?В модульном тесте для Obj1Maker я проверил, что свойства Obj1 и ObjA соответствуют друг другу, выполняя
assertEquals(obj1.getProp(), formatObjAProperty(objA))
. Однако это означает, что мне пришлось дублировать код для частного методаformatObjAProperty
из класса Obj1Maker в его модульный тест. Как я могу предотвратить повторение кода в этом случае? Я не хочу, чтобы этот метод был общедоступным/защищенным, чтобы я мог использовать его в модульном тесте. В этом случае допустимо повторение?
Спасибо, извините за длительные вопросы.