我有一个实用程序类,我需要进行一些单元测试,但是在这个实用程序类中,我的方法依赖于同一个实用程序类中的其他方法。
为此,我使用以下依赖项:
很明显,我正在使用 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()
方法会替换您定义的所有静态实现,但是如果您没有定义一个静态方法的结果,则它返回 0。
如果有人可以帮助我,我感谢你。
UnitTests 验证被测代码的公共可观察行为。
CUT 的公共可观察行为包括返回值和与其依赖项的通信。
这意味着您将其他方法视为private,只需查看调用的方法的结果。
没有这样的规则,即“实用程序类”(在它们提供基本或通用功能的意义上)必须只有静态方法。这只是一种常见的误解,这是由仅使用静态方法命名类的习惯驱动的“实用程序类”。
将所有实用程序方法设为非静态并在使用之前实例化该类是绝对可以的。
依赖注入(并且不是在 Singelton模式 )将帮助你只有一个实例中使用的所有在你的程序...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句