有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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);
    }
}

共 (2) 个答案

  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(...);
      }   
    
    }
    
  2. # 2 楼答案

    不要使用反射来测试私有方法,最好通过使用公共方法来测试这些方法

    因此,在本例中,使用Example.main()测试底层方法