我们有 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
,加上dependsOnGroups="common"
注释TestMockDAO
和TestDAO
也将不起作用,除非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 中报告测试用例。
关于java - TestNG 测试继承和组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7708262/