如果没有main()方法

时间:2015-07-30 07:28:30

标签: java selenium annotations testng

我对使用Java的TestNG有疑问。我完全是TestNG的新手。我的疑问是,如何在没有main()方法的情况下使用java中的TestNG执行所有测试用例?如果您有任何想法,请建议我。下面的代码是在java中使用TestNG的示例测试用例的示例。但是如果你注意到,你可以在代码中找到一个没有main()方法的东西。然后,测试用例是如何执行的?

我有另一个疑问。是硒Webdriver和TestNG组合执行脚本需要main()方法吗?或者我们可以在没有main()方法的情况下执行测试用例吗?如果我们可以在没有main()的情况下执行测试用例,那么它是如何实现的呢?

package com.first.example;
import org.testng.annotations.Test;
public class demoOne {
    @Test
    public void firstTestCase()
    {
        System.out.println("im in first test case from demoOne Class");
    }

    @Test
    public void secondTestCase()
    {
        System.out.println("im in second test case from demoOne Class");
    }
}

3 个答案:

答案 0 :(得分:4)

这是许多测试人员的有效怀疑。因为运行Java程序需要main()方法,而在TestNg中编写测试时我们不使用main()方法,而是使用Annotations。

TestNG中的注释是可以控制如何执行它们下面的方法的代码行。因此,简而言之,您不需要编写main()方法,TestNg本身就是这样做的。请参阅注释documentation末尾的代码,了解它是如何发生的。

正如在这个答案中正确指出的那样:https://stackoverflow.com/a/1918154/3619412

  

注释是元元对象,可用于描述其他对象   元对象。元对象是类,字段和方法。问一个   调用其元对象的对象(例如anObj.getClass())   内省。内省可以更进一步,我们可以问一个   元对象它的注释是什么(例如aClass.getAnnotations)。   内省和注释属于所谓的反思和   元编程。

此外,在测试中没有必要使用main()方法,但如果需要,可以使用main()方法运行TestNg测试。请参阅this

答案 1 :(得分:0)

从cmd提示符运行脚本我们使用下面的语句

java org.testng.TestNG testng1.xml

TestNG.java类中的main方法如何接受命令行参数,

 public static void main(String[] argv) {
    TestNG testng = privateMain(argv, null);
    System.exit(testng.getStatus());
  }

答案 2 :(得分:0)

您看对了。测试用例通过执行,该测试框架是受启发的测试框架,没有main()方法,但广泛使用annotations


注释

根据Annotations中的文档,大多数API需要大量的样板代码。要编写Web服务,您需要提供成对的接口和实现。如果可以用注释指示可以远程访问哪些方法的程序进行“装饰”,则该模板可以由工具自动生成。注释不会直接影响程序的语义,但会影响工具和库对程序的处理方式,进而会影响正在运行的程序的语义。


TestNG

TestNG是一个基于注释的简单测试框架,它使用标记注释类型指示一种方法是一种测试方法,应由测试工具运行。例如:

import org.testng.annotations.Test;

    @Test
    public void foo() {
    System.out.println("With in foo test");
    }
    

正在使用的测试工具如下:

import java.lang.reflect.*;

public class RunTests {
   public static void main(String[] args) throws Exception {
      int passed = 0, failed = 0;
      for (Method m : Class.forName(args[0]).getMethods()) {
     if (m.isAnnotationPresent(Test.class)) {
        try {
           m.invoke(null);
           passed++;
        } catch (Throwable ex) {
           System.out.printf("Test %s failed: %s %n", m, ex.getCause());
           failed++;
        }
     }
      }
      System.out.printf("Passed: %d, Failed %d%n", passed, failed);
   }
}