0

有没有办法以编程方式为@Test 设置“启用”属性?

类似于在 @BeforeClass 中定义一个布尔变量并通过启用检查它?

用例是这样的:同一个测试器测试了几个类,但不是所有的类都实现了所有的方法,所以不应该跳过缺失的方法。

测试仪将类似于

public abstract class MegaTester {

    @Test
    public void test1() {
    ...
    }

     @Test
     public void test2() {
     ...
     }

     @Test
     public void test3() {
     ...
     }
 }

 public class ATest extends MegaTester {
     @Test
     public void test1() {
     // my own implementation of test1
     }

     // test2 from MegaTester will be called here

     // I don't implement test3, but how do I indicate I don't want it ran from MegaTester?
 }

谢谢

4

3 回答 3

1

请参阅此处以获取 testng 中的 Iannotationtransformer 并实现转换方法以在运行时将启用更改为 false。

于 2013-09-22T06:10:10.547 回答
0

您是否需要测试该方法是否存在?如中,使用Java反射确保方法不存在?然后你需要定义 test2() 和 test3()。

否则你只能有一个空的身体。测试将成功,因为它应该不执行任何操作已内置到流程中。我不确定您在测试报告中没有 SKIP 是为了避免什么。跳过测试有许多正当理由,而您已经给出了其中之一。

如果ATest仅测试未实现 test3() 的类,则@Test(enabled=false)在其定义中使用。这样,TestNG 将永远不会调用 test3()。

以下是我将如何重做您提出的建议:

public abstract class MegaTester {

    @Test
    public void test1() {
    ...
    }

     @Test
     public void test2() {
     ...
     }

     @Test
     public void test3() {
     ...
     }
 }

 public class ATest extends MegaTester {
     @Test
     public void test1() {
     // my own implementation of test1
     }

     // test2 from MegaTester will be called here

     @Test(enabled=false)
     public void test3() {}
 }
于 2013-09-21T00:43:16.873 回答
0

我不完全理解您的需求...但是如果您想根据其名称/类/组/其他数据跳过一个函数,您可以设置一个 TestNG 侦听器,并在每个 @Test 之前运行它。

侦听器使您可以访问 @Test() 注释中传递的所有数据、函数名称/类,如果您想跳过它,可以抛出 SkipException 来跳过测试。

但是,如果您想在我运行 A 类时运行 X 测试(并且 X 测试不在 A 类中)...这是不可能的,除非您手动调用该函数,或者将该单独的测试放在您的 TestNG.xml 中。

于 2013-09-21T04:50:35.247 回答