Hi: Обычно вы используете mock (java agent) для замены объекта в классе.Java, экземпляр вместо Mock
Например:
public class ClassA{
public ClassB realObjectB;
public ClassC realObjectC;
public void Method1(){
realObjectC = new ClassC();
realObjectB = new ClassB(realObjectC);
}
...
...
}
public class ClassB {
public void ParticularInhereitedMethod(){
many dependency objects involved...
}
}
конечно, ClassB и ClassC есть много других зависимостей, например пул соединений.
Когда я делаю тестирования, могу ли я сделать:
public class Mock extends ClassB{
@override
public class ParticularInhereitedMethod(){
Make clean codes, no dependency.
}
}
В тестовом приложении:
public class MainClass{
public static void main(String[] args){
ClassA a = new ClassA();
ClassM m = new Mock();
a.realObjectB = m;
manipulate m;
}
}
Это выше метод работает в режиме реального тестирования? Почему я должен использовать Java-агент (замена байтового кода)?
Я думаю, вы вводите в заблуждение понятие макетных объектов и способ их реализации. Макетные объекты - это именно то, что вы показываете в своем коде, и вы не используете java-агент. И они работают. Есть издевательские библиотеки, которые очень мощны для создания макетных объектов для вас. Они могут использовать java-агенты или подобные вещи для создания этих объектов. – Jochen
Является ли мой метод неправильным или правильным? Должен ли я использовать mockito или использовать инъекцию зависимости, предложенную следующими двумя ответами? – user84592