猿问

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

我有一个返回值的函数 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解决方案:Using Mockito with multiple calls to the same method with the same arguments


但没有效果,因为testHost两次仍然返回。


30秒到达战场
浏览 85回答 1
1回答

三国纷争

我尝试了您的代码,它按您的预期工作。我创建了被测方法,例如: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());    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答