gpt4 book ai didi

java - PowerMock 模拟外部库

转载 作者:行者123 更新时间:2023-11-30 07:09:45 25 4
gpt4 key购买 nike

非常简短的问题:我如何模拟 response.getContentType() ?(使用PowerMock + TestNG)

  • 我没有调用任何 new() 方法。
  • 我正在尝试模拟类,这是其他类的方法执行的结果。

被测类:

class ClassToBeMocked {

public String getJsonPage(String jsonUrl) throws IOException {
WebClient webClient = new WebClient(BrowserVersion.CHROME);

final Page page = webClient.getPage(jsonUrl);
final WebResponse response = page.getWebResponse();
final String cType = response.getContentType();

if (cType.equals("application/json") || cType.equals("application/hal+json")) {
return response.getContentAsString();
}

throw new IllegalArgumentException("Unexpected response type " + response.getContentType());
}
}

测试自身

@PrepareForTest( { WebResponse.class, ClassToBeMocked.class})
@PowerMockIgnore("javax.net.ssl.*")
public class UrlPullerTest extends PowerMockTestCase {

@Test
public void testGetPage() throws Exception {
WebResponse mockwebResposne = PowerMockito.mock(WebResponse.class);
PowerMockito.when(mockwebResposne.getContentType()).thenReturn("wrongType");

ClassToBeMocked classToBeMocked = new ClassToBeMocked();
classToBeMocked.getJsonPage("http://google.com");
}
}

最佳答案

你不会。您的问题是,通过将新的 WebClient 调用放入源代码中,您创建了难以测试的代码。这导致了实现的直接耦合。

您应该使用依赖注入(inject)(例如注入(inject)一个为您创建 WebClient 对象的工厂)。这样做,您可以使用 EasyMock 或 Mokito 等无能为力的框架来完成所有工作。

提示:很多时候,PowerMock 的使用表明您的设计可以改进。不知道我在说什么?然后观看这些videos 。每一个都值得每一分钟!

关于java - PowerMock 模拟外部库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39420402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com