Макет нестатического метода класса

#java #mocking #mockito #powermock

#java #издевательство #mockito #powermock

Вопрос:

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

 class A {
 public static getInstance(){
  return new A();
 }
 public String getConn(){
 return "Hello";
 }
}

class B {
 public String createConn(){
  A instance  = A.getInstance();
  return instance.getConn();
 }
}
  

Мой тестовый класс:

 @RunWith(PowerMockRunner.class)  
@PrepareForTest(A.class) 
public class TestClassB{  

  @Spy 
  B classB = new B();  

  @Test 
  public void testConn(){  

      PowerMockito.mockStatic(A.class);  
      given(A.getConn()).thenReturn("Welcome");  
      assertEquals("Welcome", classB.createConn()); 
  }
  

Я хочу создать тест для класса B, createConn метод, и когда я получаю соединение, вместо «Привет» я хочу получить «Добро пожаловать», используя mockito?

Комментарии:

1. Не могли бы вы показать нам, что вы пробовали?

2. @RunWith(PowerMockRunner.class) @PrepareForTest(A.class) public class TestClassB{ @Spy B classB = new B(); @Test public void testConn(){} PowerMockito.mockStatic(A.class); given(A.getConn()).thenReturn("Welcome"); assertEquals("Welcome", classB.createConn()); }

Ответ №1:

Я нашел решение проблемы.

   PowerMockito.mockStatic(A.class);
  PropertyManager mock = PowerMockito.mock(A.class);
  given(A.getInstance()).willReturn(mock);
  given(mock.getConn()).willReturn("Welcome");
  assertEquals("Welcome", classB.createConn());