使用方法依赖性测试 util class
Testing util class with method dependency
我有一个实用程序 class,我需要做一些单元测试,但在这个实用程序中 class 我有一些方法依赖于同一实用程序中的其他方法 class。
为此,我使用了以下依赖项:
- jUnit:4.12
- Mockito: 2.8
- Powermock: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
这是因为 PowerMock
通过使用 mockStatic()
方法替换了您定义的所有静态实现,但是如果您没有定义一个静态方法的结果,那么它 returns 0 .
如果有人能帮助我,我谢谢你。
单元测试验证被测代码的 public 可观察行为。
CUT 的 public 可观察行为包括 return 值以及与其依赖项的通信。
这意味着您将其他方法视为 私有,只需查看调用方法的结果即可。
顺便说一句:
没有这样的规则,即“实用程序 classes”(在提供基本或通用功能的意义上)必须 仅具有静态方法。
这只是一个常见的误解,由习惯将 classes 命名为仅静态方法“utility classes”造成。
绝对可以让所有实用程序方法 非静态 并在使用前实例化 class。
依赖注入(不是 Singelton模式)将帮助你只一个实例在您的程序周围使用...
我有一个实用程序 class,我需要做一些单元测试,但在这个实用程序中 class 我有一些方法依赖于同一实用程序中的其他方法 class。
为此,我使用了以下依赖项:
- jUnit:4.12
- Mockito: 2.8
- Powermock: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
这是因为 PowerMock
通过使用 mockStatic()
方法替换了您定义的所有静态实现,但是如果您没有定义一个静态方法的结果,那么它 returns 0 .
如果有人能帮助我,我谢谢你。
单元测试验证被测代码的 public 可观察行为。
CUT 的 public 可观察行为包括 return 值以及与其依赖项的通信。
这意味着您将其他方法视为 私有,只需查看调用方法的结果即可。
顺便说一句:
没有这样的规则,即“实用程序 classes”(在提供基本或通用功能的意义上)必须 仅具有静态方法。 这只是一个常见的误解,由习惯将 classes 命名为仅静态方法“utility classes”造成。
绝对可以让所有实用程序方法 非静态 并在使用前实例化 class。
依赖注入(不是 Singelton模式)将帮助你只一个实例在您的程序周围使用...