2013-09-21 87 views
0

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

就像在@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? 
} 

感谢

回答

1

对于testng中的Iannotationtransformer请参考Here,并在运行时实现变换方法将enabled改为false。

+0

这就是我所需要的。谢谢! – user1293962

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() {} 
} 
0

我不完全理解你的需要......但如果你想基于其名称/班/组跳过功能/其他数据可以设置一个TestNG Listener,并让它在每个@Test之前运行。

监听器允许您访问@Test()注释中传递的所有数据,函数名称/类,如果您想跳过它,则可以抛出SkipException来跳过测试。但是,如果您想在运行A类时运行X测试(并且X测试不在A类中)......这是不可能的,除非您手动调用该函数,否则将单独的测试放入您的的testng.xml。