[英]TestNG test inheritance and groups
我们有DAO测试应该针对真正的DAO /数据库运行,并针对模拟dao来验证模拟dao与真实dao的行为相同。 为此,我们有一个这样的结构:
public abstract class DAOTestBase
{
public void testSimple()
{
// dummy assertion
assertTrue(true, "Hello");
}
}
@Test(groups = "fast")
public class TestMockDAO extends DAOTestBase
{
// setUp/tearDown and helper methods for mock
}
@Test(groups = "slow")
public class TestDAO extends DAOTestBase
{
// setUp/tearDown and helper methods for real DB
}
不幸的是,这不起作用 - TestNG认为testSimple
方法不是测试,因此不会运行它。 所以我尝试注释testSimple
方法(或DAOTestBase
类):
没有任何组的@Test
注释将产生相同的效果 - 测试不会针对fast
组或slow
组运行。
具有fast
和slow
组的@Test
注释将导致相反的效果 - 无论是仅运行快速测试还是仅进行慢速测试,都将运行TestMockDAO
和TestDAO
。
具有不同组的@Test
注释,比如common
,加上在TestMockDAO
和TestDAO
添加的dependsOnGroups="common"
注释也将不起作用,除非在要运行的组中包含common
,这又导致上面的案例2( TestMockDAO
和TestDAO
正在运行)。
最后,我正在寻找的是一种能够为子类中的继承测试定义组的方法,但似乎@Test
注释仅应用于同一个类中的测试方法,还没有继承没有@Test
注释的方法。 有没有其他方法来实现这一点(没有覆盖子类中的所有方法)?
我目前正在处理类似的情况。
使测试用例运行的一种方法是使用以下内容:
@Test
public void someTest() {
TestNG testng = new TestNG();
testng.setTestClasses(new Class[] { SomeTests.class });
testng.run();
}
参考: http : //testng.org/doc/documentation-main.html#running-testng-programmatically
不幸的是,我目前无法在SomeTests中报告测试用例。
我正在使用TestNG 6.14.3版本,我找到了使用priority
注释的解决方案。
例:
我有一个基础测试类:
public class TestBase { @Test(priority = 0) public void testA() { assertTrue(true, "testA"); } }
另一个扩展测试类:
public class Test2 extends TestBase { @Test(priority = 1) public void testB() { assertTrue(true, "testB"); }
}
当我运行Test2
测试类时,我得到以下结果:
testA: true testB: true
您是否尝试过在DAOTestBase上添加@Test
注释? 每个子类都将使用自己的组覆盖它,这应该使基础中的方法成为测试方法。
我这样解决了:
基类中的方法是“基础”组,但需要检查测试是否已初始化。
public abstract DaoTestBase {
private boolean initialized = false;
@Test(groups = "base")
public void testSimple() {
if (!initialized) { return; }
// dummy assertion
assertTrue(true, "Hello");
}
}
在子类中,在BeforeClass注释方法中初始化测试。
@BeforeClass
protected void initialize() {
super.initialized = true;
}
如果您注释父类而不是方法,则必须传递inheritGroups = false和组,因为它还继承了基类的组,但它不起作用。
现在,您必须运行TestNG以检查组base,fast或base,slow。 两个测试都将被执行,但未初始化的测试将无效。
它很难看,我不推荐它(看起来更好地重新定义子方法并调用相应的超级方法),但在我的情况下,我需要优先考虑我的测试方法,我想避免每个孩子的重复类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.