如何在Java中对main方法进行单元测试?

如何在Java中对main方法进行单元测试?,java,unit-testing,mocking,mockito,powermock,Java,Unit Testing,Mocking,Mockito,Powermock,这是我的主要功能类。这里我初始化了一个Springbean,其中包含驼峰路径。我不想测试代码中引用的任何其他类,但我只想增加这个主类的代码覆盖率。我如何模拟和测试这个类 import org.apache.camel.main.Main; public class ABC{ public static void main(String[] args) { Main main = new Main(); MyCamelRoute myCamelRoute = Sp

这是我的主要功能类。这里我初始化了一个Springbean,其中包含驼峰路径。我不想测试代码中引用的任何其他类,但我只想增加这个主类的代码覆盖率。我如何模拟和测试这个类

import org.apache.camel.main.Main;
public class ABC{
public static void main(String[] args) {

        Main main = new Main();
        MyCamelRoute myCamelRoute = SpringUtil.getBean(MyCamelRoute.class);
        main.addRouteBuilder(myCamelRoute);

        Thread t = new Thread(() -> {
            try {
                main.run();
            } catch (Exception e) {
                _logger.error("Unable to add route", e);
            }
        }, "started route");

        t.start();  
    }
}
在编写“mock”时,我假设您打算编写一个单元测试

第一:要么测试一个类,要么模拟它。您可以使用mock使您的测试独立于其他单元(您的“测试中的系统”(SUT)的“依赖项”)的行为(以及可能的bug)

第二:编写测试不是为了增加代码覆盖率。您编写测试以强制执行API合同的要求

三:测试你的主要方法:调用它!您可以输入参数并查看返回值是否符合您的期望

第四:这里的问题可能是你有无法控制的静态依赖关系。Spring允许您为bean注入配置mock。现在无法告诉您详细信息,但我相信您可以找到,它应该类似于
@Configuration
注释类或测试它们的特定版本

但是:您的测试无法控制
main
对象。诚恳地说,我猜您实际上打算测试
Main
类。另外,您可能希望通过Spring方式注入
Main
实例


第五:我不确定在单元测试中加入多线程是否是一个好主意,因为这意味着您的测试无法控制sut的环境。如果您不知道测试从何处开始,则无法确定测试结束的位置是否正确。

。。。测试这一点毫无意义。你到底要测试什么?sonarqube代码覆盖率会因为这个类而下降。我知道测试这一点没有意义,但我想增加sonarqube上的代码覆盖率,或者只是想将其从sonarqube中删除,如何做到这一点?尝试使用
PowerMockito.whenNew()
模拟用于编写单元的主实例test@CNKR感谢您的评论…如何为整个main()编写代码方法使用PowerMockito?