junit4测试中,Java反射和扩展类哪个更好
有一个Java类,我正试图为它编写一个JUnit测试
使用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);
}
}
# 1 楼答案
理想情况下,您可以重构代码,将需要自己测试的
private
方法提取到新类中的新public
方法中。如果一个功能需要单独的测试,那么它通常被限定为public
除了使用反射,您还可以将这些方法的可见性更改为默认级别,并且它们将可供同一软件包中的测试访问
# 2 楼答案
不要使用反射来测试私有方法,最好通过使用公共方法来测试这些方法
因此,在本例中,使用
Example.main()
测试底层方法