【发布时间】:2020-04-18 00:19:20
【问题描述】:
这是我要测试的私有方法:
private int privateMethod(int[] numbers) {
var sum = 0;
for (int number : numbers) {
sum += number;
}
return sum;
}
我在 Java 11 中这样做。
以下是我使用 Junit 5 进行的测试:
import org.junit.jupiter.api.Test;
import org.junit.platform.commons.function.Try;
import java.lang.reflect.Method;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.platform.commons.util.ReflectionUtils.*;
@Test
public void assertPrivateMethodExistence() {
final String methodName = "privateMethod";
final Optional<Class<?>> maybeClass = getAppClass();
Class<?> aClass = maybeClass.get();
Optional<Method> maybeMethod = findMethod(aClass, methodName, int[].class);
assertTrue(maybeMethod.isPresent(), methodName + " should be present in " + aClass.getCanonicalName());
final Method method = maybeMethod.get();
assertTrue(isPrivate(method), methodName + " should be private");
assertEquals(int.class, method.getReturnType(), methodName + " should return type should be 'int'");
}
我正在使用ReflectionUtils 类
我想知道是否有办法测试privateMethod 包含一个名为sum 的变量,它的类型是int?
【问题讨论】:
-
我想知道是否有办法测试 privateMethod 包含一个名为 sum 的变量,它的类型是 int? 没有。因为它可以命名为
total和输入int并生成完全相同的字节码。 -
你为什么要尝试测试它?单元测试应该测试方法的效果,在这种情况下意味着测试它是否计算出正确的返回值。 如何计算返回值是方法内部的,而不是你测试的,只有 result 应该被测试。