То, что я хочу сделать, - это метод, который может
- генерирует экземпляр класса X (переменная класса передается в arg) и
- переопределить некоторые из его методов
В частности, родительский класс X, который я хочу переопределить, содержит
- Не содержит конструктор по умолчанию (например, все конструкторы с аргументами)
- Конструкторы, вызывающие не приватный метод в том же классе
Первоначально я думал, что довольно просто использовать отражение или что-то подобное,
Тогда я обнаружил, что есть ограничение на выполнение моего требования.
Я думаю, что это достижимо, так как Mockito может выполнять все виды выполнения метода инъекций.
Пожалуйста, кто-нибудь дать совет, спасибо.
Изображение псевдокода I выглядит следующим образом:
createAndOverride(Class X) {
X newObj = X.newInstance(args) {
@override
methodOfX(args2) {
...
}
}
return newObj;
}
- Исходный сценарий проблемы
Я был предназначен для тестирования класса, в котором есть несколько методов, вызывающих X1.get (), X2.get (), X3.get ()
В некоторых тестовых случаях мне нужно сделать Xn.get (), чтобы вернуть что-то, что я могу контролировать для теста (например, ноль)
Из-за нижеприведенного ограничения:
- Но из-за ограничения фиктивного инструмента JMock 1.0 (у меня нет контроля :(), поэтому я не могу просто насмехаться над Xn.get (), возвращая «someSpecifiedObjects»
- Xn не имеет нулевых конструкторов и конструкторов, вызывающих не приватный член
Мой обходной путь - самодельный класс Xn, и я передаю его в тестовый набор, чтобы ожидать Cn.get ()
Пример кода:
ClassToTest.SomeMethod(new X1() {
@override
get() {
return someSpecifiedObjects;
}
});
И такие вещи распространяются на Тестовый набор.
Поэтому, чтобы уменьшить количество дублирующегося кода, я хотел бы создать метод для генерации экземпляра Xn с указанным переопределенным методом для тестирования. например
X1 x1 = createAndOverride(X1);
Тогда проблема этого поста наступает