java - TestNG 测试继承和组

标签 java inheritance testng grouping

我们有 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组。

  • 带有组 fastslow@Test 注释将导致相反的效果 - TestMockDAOTestDAO 将运行,而不管应该只运行快速测试还是只运行慢速测试。

  • 带有不同组的 @Test 注释,比如 common,加上 dependsOnGroups="common" 注释 TestMockDAOTestDAO 也将不起作用,除非 common 包含在要运行的组中,这再次导致上面的情况 2(TestMockDAOTestDAO 运行)。

最后,我正在寻找的是一种能够为子类中的继承测试定义组的方法,但似乎 @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 中报告测试用例。

关于java - TestNG 测试继承和组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7708262/

相关文章:

java - Spring MVC请求方法 'GET'不支持

java - 使用 java 驱动程序提高 Mongodb 的性能

java - 带有 jUnit 的测试监听器

java - com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure

java - 图类中的加权边表示

java - 使用另一种继承方法将变量传递到方法中

inheritance - 用于约束和继承集的接口(interface)

ruby - 为什么 inspect for the subclasses of built-in classes 中没有列出实例变量?

java - 我想按顺序运行三个 @Test 方法

java - 使用 List<Web Element> 会严重减慢脚本速度