如何在顺序调用中向模拟静态方法返回多个答案



我有一个返回 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返回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仍然返回。

我尝试了您的代码,它按您的预期工作。我创建了测试中的方法,如下所示:

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());
    }
}

相关内容

  • 没有找到相关文章

最新更新