使用方法依赖项测试实用程序类



我有一个实用程序类,我需要对其进行一些单元测试,但是在这个实用程序类中,我有一些依赖于同一实用程序类中其他方法的方法。

为此,我使用以下依赖项:

  • j单位:4.12
  • 莫比托:2.8
  • 电源模拟:1.7

很明显,我正在使用Java来执行我的代码。

现在转到示例代码:

public final class AppUtils {
private AppUtils () {
throw new UnsupportedOperationException("This class is not instantiable.");
}
public static int plus(int a, int b) {
return a + b;
}
public static float average(int a, int b) {
return ((float) AppUtils.plus(a, b)) / 2;
}
}

和单元测试:

@RunWith(PowerMockRunner.class)
@PrepareForTest({AppUtils.class})
public class AppUtilsTest {
@Test
public void testPlus() { //This test must be good.
assertEquals(6, AppUtils.plus(4, 2));
}
@Test
public void testAverage() {
PowerMockito.mockStatic(AppUtils.classs);
when(AppUtils.plus(anyInt())).thenReturn(6);
assertEquals(3f, AppUtils.average(4, 3), 1e-2d);
}
}

这样我就做了我的单元测试,但这给我带来了一个错误,因为它告诉我预期的结果与实际结果不对应。

expected: 3.000f
actual: 0

这是因为使用mockStatic()方法PowerMock替换定义的所有静态实现,但如果未定义一个静态方法的结果,则返回 0。

如果有人能帮助我,我感谢你。

UnitTests 验证被测代码的公开可观察行为。

CUT 的公共可观察行为包括返回值和与其依赖项的通信。

这意味着您将其他方法视为私有方法,只需查看所调用方法的结果。

<小时 />

顺便说一句:

没有这样的规则,即"实用程序类"(在提供基本或公共功能的意义上(必须只有静态方法。 这只是一种常见的误解,这种误解是由仅使用静态方法将类命名为"实用程序类"的习惯所驱动的。

使所有实用程序方法都非静态并在使用类之前实例化它是绝对可以的。

依赖注入(而不是辛格尔顿模式(将帮助您在程序中只使用一个实例......

最新更新