2016-05-13 4 views
0

Я новичок в модульном тестировании, и мой ясень рекомендовал Mockito. Я исследую этот инструмент, но имеющий некоторую путаницу, как:Зачем нам нужно создавать макет?

  1. Почему нам нужно создать фиктивный объект в то время как мы можем создать реальный объект любого класса.

  2. Почему мы устанавливаем поведение любого метода, используя stubbing как условие «когда и тогда», в то время как разработчик задает поведение метода.

  3. Если мы выполняем stubbing любого метода, тогда он будет статичным, если разработчик изменит код этого метода, тогда его влияние не появится в нашем тестовом примере, оно всегда будет проходить.

Например:

TestingServices test = Mockito.mock(TestingServices.class); 

    // define return value for method getUniqueId() 

    System.out.println("unique id is "+test.getUniqueId()); 

    when(test.getUniqueId()).thenReturn(44); 

    assertEquals(test.getUniqueId(),44); 

В коде выше фрагмент кода assertEquals всегда будет проходить, изменяет ли разработчик кода или нет.

+1

Ваш тест является плохим примером, потому что это блок тестирования то же самое он насмешливо. В реальном примере вы должны выполнить тестирование A путем насмешивания B, чтобы вы изолировали поведение A и наоборот. Тогда у вас будут тесты интеграции на более высоком уровне, которые проверяют правильность взаимодействия A и B, когда они не издеваются. – jonrsharpe

+0

Привет, Jonrsharpe, Спасибо, что дайте мне ans..actually мое беспокойство - это то, почему нам нужно уклоняться от макета объекта и укутывания ?? пожалуйста, объясните, что ваша помощь очистит мои сомнения. –

+0

Привет, Exoddus, можете ли вы дать мне больше примеров, когда мы создаем макет или когда это не нужно для его создания. –

ответ

0

Первое, что нужно сделать, это то, что вы тестируете в любом случае.

В вашем фрагменте кода, кажется, вы тестируете класс TestingServices, и вы не должны издеваться над этим классом, потому что это поведение, которое вы тестируете, а не то, как Mockito работает, вводя ваши ответы «поддельные» методы. Фактически, в вашем примере вы тестируете, что Mockito вводит поведение, которое вы хотите, и работает как ожидалось, не более того.

Например, ваш класс TestingServices имеет объект внутри, который использует сторонний API и получает ответ (или объект DAO, используемый контроллером в архитектуре MVC). Если вы тестируете устройство TestingServices или Controller, вы не хотите сбой, потому что dependecy, и вы можете издеваться над этой частью системы.

Mocking позволяет сосредоточиться на тестируемом классе, а не на контексте или других классах, необходимых в процессе тестирования, и отвлечь остальные компоненты.

Есть много вопросов, говорящих об этом:

+0

поэтому, когда нам нужно создать макет, пожалуйста, дайте мне несколько примеров. –

+1

Mohd, я отвечаю на ваш вопрос с кодом, который вы указали.Если вам нужны конкретные примеры насмешек, вы наверняка найдете множество примеров, ищущих «java mock examples» :) – exoddus