2014-06-06 4 views
1

Как создать тестовый тест JUnit для следующего класса с PowerMock & Mockito. Класс, который я хочу внедрить, - это последний класс, поэтому мне нужно будет использовать PowerMock, чтобы издеваться над ним. Также обратите внимание, что я бы предпочел использовать DI, а не сеттер, чтобы ввести его.Инъекция зависимостей с PowerMock & Mockito

import javax.inject.Inject; 

public class ObjectA { 

    // Use DI to Inject a mock for this 'final' class 
    @Inject 
    private ObjectB objectB; 

    public ObjectA() { 
    } 

    public void someMethod() { 
     if (null == this.objectB) { 
      throw new IllegalStateException("Failed to inject ObjectB"); 
     } 

     this.objectB.someOtherMethod(); 
    } 
} 

ответ

1

Нет необходимости в PowerMock на данном этапе. Мокито может выполнять всю работу.

public class ObjectATest 
{ 
    @Mock 
    private ObjectB objectB; 

    @InjectMocks 
    private ObjectA objectA; 

    @Before 
    public void setup() 
    { 
     MockitoAnnotations.initMocks(this); 
    } 

    @Test 
    public void test() 
    { 
     try 
     { 
      objectA.someMethod(); 
     } 
     catch(IllegalStateException e) 
     { 
      Assert.fail(); 
     } 
    } 
} 
+1

Проблема заключается в том, что Mockito не может высмеять окончательный класс ObjectB – DarVar

+1

doh Я должен прочитать ваш вопрос слишком быстро. Моя ошибка – ndrone

+0

Если вы согласны с тем, что ваш ответ неверен, вы можете успешно удалить его. – Andremoniy

0

Вы можете использовать класс Whitebox. Например, скажем, вы создали макет из ObjectB под названием objectBMock и экземпляр ObjectA под названием objectA:

Whitebox.setInternalState(objectA, objectBMock); 

Это «впрыснуть» objectBMock в objectA.

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