gpt4 book ai didi

java - 如何在包含在非静态方法中的静态方法上正确使用 Mockito?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:50:08 25 4
gpt4 key购买 nike

所以我尝试在其中包含静态方法的方法上使用 Mockito。原因是我不能使用 PowerMock,所以我将方法包装在非静态方法下。

public class WrapperUtil {

public String getURLContent(String path) throws IOException{
URL url = new URL(path);
return IOUtils.toString(url);
}
}

现在我以两种不同的方式测试了 WrapperUtil 类。一个测试有效,但没有为 WrapperUtil 类提供任何覆盖,另一个是抛出与静态方法相关的空指针异常。

这是有效的,但没有提供任何覆盖范围。

@RunWith(MockitoJUnitRunner.class)
public class WrapperUtilTest {

@InjectMocks
WrapperUtil ioutils;


@Before
public void setUp() throws Exception {

ioutils = new WrapperUtil();
}

@Test
public void testGetUrlContent() throws IOException {

WrapperUtil ioutilsSpy = Mockito.spy(ioutils);
Mockito.doReturn("test").when(ioutilsSpy).getURLContent(Mockito.anyString());
assertTrue(ioutils2.getURLContent("test").contains("test"));

}

}

这是行不通的:

@RunWith(MockitoJUnitRunner.class)
public class WrapperUtilTest {

@InjectMocks
WrapperUtil ioutils;


@Before
public void setUp() throws Exception {

ioutils = new WrapperUtil();
}

@Test
public void testGetUrlContent() throws IOException {

WrapperUtil ioutilsSpy = Mockito.spy(ioutils);
Mockito.when(ioutilsSpy).getURLContent(Mockito.anyString()).thenReturn("test");
assertTrue(ioutils2.getURLContent("test").contains("test"));

}

}

如何在不使用 PowerMockito 的情况下完成这项工作并实现代码覆盖?非常感谢你的帮助。

最佳答案

我的两分钱在这里:

  • 我什至会更进一步,定义一个接口(interface)来表示功能
  • 另一方面,我不会“过度”测试包装器实现

要点是:这里只有一小部分胶水代码。如果您能够测试此代码以验证此粘合代码是否有效 - 那么您就没问题。

换句话说:避免挂断实现 100% 的覆盖率! Coverage 是一种工具,旨在帮助您实现代码质量。

100% 的覆盖率不会导致“100% 的代码质量”!

您通过尝试“始终做正确的事”来获得代码质量。

在这里,“正确的事情”不是争取 100% 的覆盖率。

我猜想如果不求助于 PowerMock(ito),您将无法实现该目标。由于避免使用 PowerMock(ito) 本身就是一件好事——我的建议是:简单地接受您无法对此类进行 100% 的覆盖。

如果有的话,我会花时间尝试从覆盖运行中排除这个类。

关于java - 如何在包含在非静态方法中的静态方法上正确使用 Mockito?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44666649/

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