2012-12-12 3 views
0

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-агент (замена байтового кода)?

+2

Я думаю, вы вводите в заблуждение понятие макетных объектов и способ их реализации. Макетные объекты - это именно то, что вы показываете в своем коде, и вы не используете java-агент. И они работают. Есть издевательские библиотеки, которые очень мощны для создания макетных объектов для вас. Они могут использовать java-агенты или подобные вещи для создания этих объектов. – Jochen

+0

Является ли мой метод неправильным или правильным? Должен ли я использовать mockito или использовать инъекцию зависимости, предложенную следующими двумя ответами? – user84592

ответ

2

Я предлагаю использовать Mockito http://code.google.com/p/mockito/ и Spring для решения проблемы.

С Mockito УИ может объявить параметр возврата на объект из параметров, с весны вы можете разрешить экземпляр объекта во время выполнения

+0

нужный инструмент для правильной работы – tucuxi

+0

Является ли мой метод неправильным или правильным? Должен ли я использовать mockito или использовать инъекцию зависимости, предложенную следующими двумя ответами? – user84592

+0

Предметом вашего метода является a.realObjectB = m, таким образом, если свойство должно быть частным, вы собираетесь сделать его общедоступным только для теста. Я думаю, что вы shoud Spring и инвертирование контроля, так что вы можете ввести право на свой объект. –

1

Вы можете найти трудно дразнить из/заменить, как ваши объекты относительно сложный. Я бы посмотрел, как проще протестировать их и использовать инъекцию зависимостей, чтобы вы могли заменить их реализации без субклассификации.

+0

Является ли мой метод неправильным или правильным? Должен ли я использовать mockito или использовать инъекцию зависимости, предложенную следующими двумя ответами? – user84592

Смежные вопросы