2013-04-02 9 views
2

Совершенно новый для unittesting и mockito, у меня есть метод для проверки, который вызывает метод для нового объекта. Как я могу издеваться над внутренним объектом?Mock «внутренний» объект с Mockito

methodToTest(input){ 
... 
OtherObject oo = new OtherObject(); 
... 
myresult = dosomething_with_input; 
... 
return myresult + oo.methodX(); 
} 

Могу ли я высмеять оо, чтобы вернуть «abc»? я действительно только хочу, чтобы проверить свой код, но когда я издеваться «methodToTest» вернуть «42abc», то я не буду проверять мой «dosomething_with_input» -кода ...

+0

Вы задаете вопрос, на который отвечает https://code.google.com/p/mockito/wiki/MockingObjectCreation, или я вас неправильно понял? –

+0

Вы правы, что отвечает на мой вопрос, я ожидал этого уже. Но я надеялся найти способ без методов создания объектов, так как я не хотел менять код, чтобы уметь его удалять ... –

ответ

4

Я считаю, что класс, который реализует methodToTest является названный ClassToTest

  • Создание класса фабрики для OtherObject
  • есть завод в области ClassToTest
  • либо
    • передать завод в качестве параметра конструктора ClassToTest
    • или инициализировать его при выделении ClassToTest объекта и создать сеттера для завода

тестовый класс, который должен выглядеть

public class ClassToTestTest{ 
    @Test 
    public void test(){ 
     // Given 
     OtherObject mockOtherObject = mock(OtherObject.class); 
     when(mockOtherObject.methodX()).thenReturn("methodXResult"); 
     OtherObjectFactory otherObjectFactory = mock(OtherObjectFactory.class); 
     when(otherObjectFactory.newInstance()).thenReturn(mockOtherObject); 
     ClassToTest classToTest = new ClassToTest(factory); 

     // When 
     classToTest.methodToTest(input); 

     // Then 
     // ... 
    } 
} 
+1

Это, наверное, лучший способ сделать это. Однако, как FYI, PowerMock разрешает насмешливые вызовы конструктора. Опять же, я бы предложил выше, чем PowerMock. –

+2

единственной «проблемой» в этом является то, что я должен реорганизовать код для теста, чтобы он соответствовал этому шаблону –