在这篇文章中,我们将讨论如何在TestNG中忽略测试用例。TestNG帮助我们忽略使用@Test注释的情况,我们可以在不同的级别上忽略这些情况。
- 首先,只忽略一个测试方法或测试用例。
- 第二,忽略一个类及其子类中的所有情况。
- 第三个是,忽略包及其子包中的所有情况。
下面我们就来逐一看一下以上几点。
仅忽略测试方法或测试用例
这可以通过在测试用例或方法上使用@Test(enabled = false)或@Ignore注释来实现。
import org.testng.Assert;
import org.testng.annotations.Ignore;
import org.testng.annotations.Test;public class CodekruTest {@Test @Ignorepublic void test1() {System.out.println("Excecuting test1");Assert.assertTrue(true);}@Testpublic void test2() {System.out.println("Excecuting test2");Assert.assertTrue(true);}@Test(enabled = false)public void test3() {System.out.println("Excecuting test3");Assert.assertTrue(true);}}
输出:
Excecuting test2
PASSED: test2
===============================================
Default test Tests run: 1, Failures: 0, Skips: 0 ===============================================
因此,这两个(test1和test3)都被忽略了,只有test2方法被运行和执行。
忽略类及其子类中的所有大小写
这也可以通过使用@Ignore注释来实现。因此,如果我们在一个类上放置@Ignore注释,那么该类及其子类中的case将被忽略。让我们举个例子。
注意:@Ignore注释的优先级高于单个@Test方法注释。当@Ignore放置在类上时,该类中的所有测试都将被禁用,即使我们将@Test(enabled = true)放在测试用例上。
package Test;import org.testng.Assert;
import org.testng.annotations.Ignore;
import org.testng.annotations.Test;@Ignore
public class CodekruTest {@Testpublic void test1() {System.out.println("Excecuting test1");Assert.assertTrue(true);}@Testpublic void test2() {System.out.println("Excecuting test2");Assert.assertTrue(true);}@Test(enabled = true)public void test3() {System.out.println("Excecuting test3");Assert.assertTrue(true);}}
输出:
===============================================
Default test Tests run: 0, Failures: 0, Skips: 0 =============================================== ===============================================
Default suite Total tests run: 0, Failures: 0, Skips: 0 ===============================================
[TestNG] No tests found. Nothing was run
所以,我们可以看到,没有一个案件被执行。现在让我们为上面的类(CodekruTest)创建一个子类(CodekruTestSubclass),尝试执行子类测试用例,看看会发生什么。
import org.testng.Assert;
import org.testng.annotations.Ignore;
import org.testng.annotations.Test;class CodekruTestSubclass extends CodekruTest{@Testpublic void test1() {System.out.println("Excecuting test1 of subclass");Assert.assertTrue(true);}@Testpublic void test2() {System.out.println("Excecuting test2 of subclass");Assert.assertTrue(true);}}@Ignore
public class CodekruTest {@Testpublic void test1() {System.out.println("Excecuting test1");Assert.assertTrue(true);}@Testpublic void test2() {System.out.println("Excecuting test2");Assert.assertTrue(true);}@Test(enabled = true)public void test3() {System.out.println("Excecuting test3");Assert.assertTrue(true);}}
输出:
===============================================
Default test Tests run: 0, Failures: 0, Skips: 0 =============================================== ===============================================
Default suite Total tests run: 0, Failures: 0, Skips: 0 ===============================================
[TestNG] No tests found. Nothing was run
这里,子类的case没有执行,因为我们在父类上使用了@Ignore注释。
忽略包及其子包中的所有大小写
我们也可以忽略包及其子包中的测试用例。但是,我们不能只是将@Ignore注释放在包的顶部,如下面的代码所示。相反,我们必须创建另一个package-info.java文件并添加包级注释。
@Ignore // this is wrong and is throwing an error
package Test;import org.testng.Assert;
import org.testng.annotations.Test;public class CodekruTest {@Testpublic void test1() {System.out.println("Excecuting test1");Assert.assertTrue(true);}
}
如何创建www.example.com文件?因为eclipse不允许你创建一个package—info类文件。
- 选择New -> Package。
- 现在,勾选复选框package-info.java
这将在上述包中创建一个package-info.java文件。所以,现在在这个文件中,我们可以在Test包上写@Ignore,如下所示。
@org.testng.annotations.Ignore
package Test;
因此,这个包及其子包中的所有情况现在都将被忽略。