我们可以跳过testngxml中的java@AfterClass方法吗
我有一个testngjava类,其中一些测试有@BeforeClass和@AfterClass。我使用xml来运行这个testng类。有时我可能需要跳过@AfterClass,因为它通常会清理测试台 我们如何做到这一点,只跳过@AfterClass我们可以跳过testngxml中的java@AfterClass方法吗,java,testng,skip,Java,Testng,Skip,我有一个testngjava类,其中一些测试有@BeforeClass和@AfterClass。我使用xml来运行这个testng类。有时我可能需要跳过@AfterClass,因为它通常会清理测试台 我们如何做到这一点,只跳过@AfterClass 在我的情况下,我想跳过下课 所以把“一些场景”放在一个条件 @AfterClass public void after() { if (something) { //do stuff } } @BeforeC
在我的情况下,我想跳过下课 所以把“一些场景”放在一个条件
@AfterClass
public void after()
{
if (something)
{
//do stuff
}
}
@BeforeClass在所有测试开始之前调用一次,类似地,在所有测试执行之后只调用一次@AfterClass。因此,在@AfterClass方法中添加场景检查毫无意义,因为它是将在junit类和程序出口中执行的最后一个方法。
如果您想在每次@Test执行之前/之后检查某些条件,请使用@before/@after您可以尝试使用TestNG侦听器。例如,我们可以有以下测试类
com.example.SampleTest
:
public class SampleTest {
@BeforeClass
public void setUp() {
System.out.println("Executing before class method.");
}
@Test
public void test() {
Assert.assertEquals(1, 1);
}
@AfterClass
public void tearDown() {
System.out.println("Executing after class method.");
}
}
要禁用执行@AfterClass
方法,您可以创建一个侦听器com.example.AfterClassListener
,如下所示:
public class AfterClassListener implements IAnnotationTransformer2 {
@Override
public void transform(IConfigurationAnnotation annotation, Class testClass,
Constructor testConstructor, Method testMethod) {
if (annotation.getAfterTestClass()){
annotation.setEnabled(false);
}
}
}
之后,将此侦听器添加到您的testng.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="test-suite" verbose="1" thread-count="3" parallel="none">
<listeners>
<listener class-name="com.example.AfterClassListener"/>
</listeners>
<test name="Login Test">
<classes>
<class name="com.example.SampleTest"/>
</classes>
</test>
</suite>
每当您想重新启用它时,只需从
testng.xml
中删除此侦听器。如果它是预先决定的,即在套件开始运行之前,您知道是否要清除,则可以使用参数/系统属性对其进行控制。
将参数放入xml文件中,并根据需要执行的操作将其设置为true和false。您甚至可以从系统变量中读取它
您的@AfterClass可以检查
if (toDeleteDb) -> clear -> else return (do nothing)
如果是在运行时,则设置属性并用该属性替换If条件 为什么您有一个@AfterClass块,当您实际上不希望它存在时,它应该在单元测试完成后调用?如果你不想要它,你就不能把它拿走吗?请详细解释应该调用哪些测试和准备/清理代码,哪些不应该调用(以及为什么)。在我的例子中,有些场景我想跳过清除测试台上数据的afterclass。因此,我不想让一个单独的类没有AfterClass,而是想通过跳过它来重用它。这些测试不是在一个没有
@AfterClass
的类中,这样就不会清理测试床了吗?当@AfterClass
(应该在类的测试完成后调用)实际上没有被调用时,维护测试听起来会很困难。非常感谢,可以这样做,但是我们不能在testng xml文件中进行吗?很好,让我来尝试一下