Как я могу вернуть несколько ответов в последовательных вызовах для смоделированного статического метода - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть функция, которая возвращает значение java.net.InetAddress.getLocalHost().getHostName()

Я написал тест для своей функции так:

@PrepareForTest({InetAddress.class, ClassUnderTest.class})
@Test
public void testFunc() throws Exception, UnknownHostException {
  final ClassUnderTest classUnderTest = new ClassUnderTest();

  PowerMockito.mockStatic(InetAddress.class); 
  final InetAddress inetAddress = PowerMockito.mock(InetAddress.class);
  PowerMockito.doReturn("testHost", "anotherHost").when(inetAddress, method(InetAddress.class, "getHostName")).withNoArguments();
  PowerMockito.doReturn(inetAddress).when(InetAddress.class);
  InetAddress.getLocalHost();

  Assert.assertEquals("testHost", classUnderTest.printHostname());
  Assert.assertEquals("anotherHost", classUnderTest.printHostname());
  }

printHostName это просто return java.net.InetAddress.getLocalHost().getHostName();

Как мне вызвать getHostName return anotherHost для второго утверждения?

Я пытался сделать:

((PowerMockitoStubber)PowerMockito.doReturn("testHost", "anotherHost"))
.when(inetAddress, method(InetAddress.class, "getHostName")).withNoArguments();
PowerMockito.doReturn("testHost", "anotherHost")
.when(inetAddress, method(InetAddress.class, "getHostName")).withNoArguments();

и я попытался использовать решение doAnswer здесь: Использование Mockito с несколькими вызовами одного и того же метода с одинаковыми аргументами

Но безрезультатно, поскольку testHost по-прежнему возвращается оба раза.

1 Ответ

0 голосов
/ 17 апреля 2019

Я попробовал ваш код, и он работает, как вы ожидаете.Я создал тестируемый метод, как:

public String printHostname() throws Exception {
    return InetAddress.getLocalHost().getHostName();
}

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

@RunWith(PowerMockRunner.class)
public class ClassUnderTestTest {

    @PrepareForTest({InetAddress.class, ClassUnderTest.class})
    @Test
    public void testFunc() throws Exception {
        final ClassUnderTest classUnderTest = new ClassUnderTest();

        PowerMockito.mockStatic(InetAddress.class);
        final InetAddress inetAddress = PowerMockito.mock(InetAddress.class);
        PowerMockito.doReturn("testHost", "anotherHost")
                .when(inetAddress, PowerMockito.method(InetAddress.class, "getHostName"))
                .withNoArguments();
        PowerMockito.doReturn(inetAddress).when(InetAddress.class);
        InetAddress.getLocalHost();

        Assert.assertEquals("testHost", classUnderTest.printHostname());
        Assert.assertEquals("anotherHost", classUnderTest.printHostname());
    }

}
...