2015-05-07 5 views
0

Я пытаюсь издеваться над локальной переменной внутреннего класса (Class2.class), но он не работает. Я делюсь своим кодом ниже, пожалуйста, помогите мне запустить второй testCase.Mock Локальная переменная внутреннего класса - с использованием mockito/powermock

Class1.java, которые содержат Class2 в качестве внутреннего класса

public final class Class1 { 

    Class2 class2 = new Class2(); 

    public String echoString(String s) { 
     return class2.echoString2(s); 
    } 

    public class Class2 { 

     public String echoString2(String s) { 
      Class3 class3 = new Class3(null); 
      System.out.println("######## Class3 = " + class3); 
      return class3.getResult(s); 
     } 
    } 
} 

Class3.java

public class Class3 { 
    private String data; 

    public Class3(String data){ 
     this.data=data; 
    } 

    public String getResult(String s) { 
     return data; 
    } 
} 

Ниже мой Тестовый TestNG я хочу, чтобы запустить второй тест case-pLease help

@PrepareForTest({ Class1.class, Class2.class, Class3.class }) 
public class MockTest extends PowerMockTestCase { 
    String testInput = "input"; 
    String mockedResult = "Mocked - " + testInput; 

    @InjectMocks 
    private Class1 tested; 

    @Mock 
    Class2 tested2; 

    @BeforeMethod 
    public void InjectingMocks() { 
     MockitoAnnotations.initMocks(this); // Creates a fresh set of mocks 
    } 

    @Test 
    public void mockTest() { 

     PowerMockito.doReturn(mockedResult).when(tested2) 
       .echoString2(testInput); 

     Assert.assertEquals(tested.echoString(testInput), mockedResult); 
    } 

    @Test 
    public void mockTest2() throws Exception { 
     Class3 c3 = PowerMockito.mock(Class3.class); 

     PowerMockito.whenNew(Class3.class).withAnyArguments().thenReturn(c3); 

     PowerMockito.doReturn(mockedResult).when(c3).getResult(testInput); 

     Assert.assertEquals(tested.echoString(testInput), mockedResult); 
    } 
} 

Это показывает ошибку

PASSED: mockTest 
FAILED: mockTest2 
java.lang.AssertionError: expected [Mocked - input] but found [null] 

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

ответ

0

Как насчет:

@Test 
    public void mockTest2() throws Exception { 
     Class3 c3 = PowerMockito.mock(Class3.class); 

     PowerMockito.whenNew(Class3.class).withAnyArguments().thenReturn(c3); 

     PowerMockito.doReturn(mockedResult).when(c3).getResult(testInput); 

     tested = new Class1(); 
     Assert.assertEquals(tested.echoString(testInput), mockedResult); 
    } 

Я могу ошибаться, но я думаю, что проблема может быть, что новый Class3 (нуль) вызывается, прежде чем издеваться конструктор class3 с PowerMockito.

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