有一个我要为其编写JUnit测试的Java类。
使用JaCoCo监视代码覆盖率。因此,还需要从测试类中调用私有方法。
使用Java反射从测试类中调用main方法和private方法。
我的问题是在测试类中更好地扩展主类(示例),还是使用java反射来访问私有方法?目前,我正在使用以下反射。
在测试类中扩展Java类甚至是一个好习惯吗?
我是编写测试课的新手,因此是个问题。非常感谢您的帮助。
public class Example {
public static void main(String[] s) {
method1();
method2();
..........
}
private Employee method1(String str) {
.........
}
private Employee method2(String str1) {
.........
}
}
public class ExampleTest {
@InjectMocks
Example example;
.....
@Before
public void setUp() {
........
}
@Test
public void testMain() {
try {
String[] addresses = new String[]{};
Example loadSpy = spy(example);
loadSpy.main(addresses);
assertTrue(Boolean.TRUE);
} catch (.. e) {
.......
}
assertTrue(true);
}
@Test
public void testMethod1() {
try {
Method method = example.getClass().getDeclaredMethod("method1", String.class);
method.setAccessible(true);
method.invoke(example, "1111");
} catch (Exception e) {
.....
}
assertTrue(true);
}
@Test
public void testMethod1() {
try {
Method method = example.getClass().getDeclaredMethod("method2", String.class);
method.setAccessible(true);
method.invoke(example, "1111");
} catch (Exception e) {
.....
}
assertTrue(true);
}
}
答案 0 :(得分:5)
不要使用反射来测试 private 方法,最好通过使用 public 方法来测试这些方法。
因此,在这种情况下,请使用Example.main()
测试基础方法。
答案 1 :(得分:1)
理想情况下,您将重构代码以提取需要自己测试的private
方法到新类中的新public
方法中。如果某个功能需要单独的测试,则通常可以将其视为public
。
除了使用反射之外,您还可以将这些方法的可见性更改为默认级别,并且同一包中的测试将可以使用它们。
public class Example {
Employee method1(String str) {
...
}
Employee method2(String str1) {
...
}
}
public class ExampleTest {
@Test
public void testMethod1() {
new Example().method1(...);
}
}