testng源码阅读之入口在哪

testng的入口在哪里

先上图。

这里写图片描述

入口就在这个包里边.具体的类就是testNG.class

 /**
   * The TestNG entry point for command line execution.
   *
   * @param argv the TestNG command line parameters.
   * @throws FileNotFoundException
   */
  public static void main(String[] argv) {
    TestNG testng = privateMain(argv, null);
    System.exit(testng.getStatus());
  }

  /**
   * <B>Note</B>: this method is not part of the public API and is meant for internal usage only.
   */
  public static TestNG privateMain(String[] argv, ITestListener listener) {
    TestNG result = new TestNG();

    if (null != listener) {
      result.addListener(listener);
    }

    //
    // Parse the arguments
    //
    try {
      CommandLineArgs cla = new CommandLineArgs();
      m_jCommander = new JCommander(cla, argv);
      validateCommandLineParameters(cla);
      result.configure(cla);
    }
    catch(ParameterException ex) {
      exitWithError(ex.getMessage());
    }

    //
    // Run
    //
    try {
      result.run();
    }
    catch(TestNGException ex) {
      if (TestRunner.getVerbose() > 1) {
        ex.printStackTrace(System.out);
      }
      else {
        error(ex.getMessage());
      }
      result.setStatus(HAS_FAILURE);
    }

    return result;
  }

上边这段就是具体的入口。main直接调用了privateMain,在privateMain里边做具体的初始化工作。
第一步:
加载监听器

第二步:
解释命令行参数

第三步:
正式运行

看了这个短短几行代码,冒出来几个问题:
1)为啥无端端要弄个privateMain?
看英文注释,privateMain应该会被多个地方调用,但我仍觉得这个是多此一举。
2)看起来listeners如果是在本地运行,应该永远都是空才是,那有啥用?
这个大致看了下,命令行方式的启动,会在privateMain里边的configure函数做默认listeners的加载。如果在
命令行的xml指定了使用别的listeners,就会替换掉默认的。这个是testng灵活扩展的关键。
具体的listeners的加载跟定义。后边结合testng的运行跟加载机制,详细说明。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值