TestNG - @BeforeMethod用于特定方法

时间:2013-12-17 17:23:28

标签: java spring testng spring-test

我正在使用Spring Test和TestNG测试我们的DAO,我想在某些方法之前运行一个特定的文本夹具脚本,允许在每个方法之后回滚修改,以便测试可以自由地做任何事情夹具数据。

最初我认为'群组'适合它,但我已经意识到它们不适合它(请参阅此问题:TestNG BeforeMethod with groups)。

有没有办法将@BeforeMethod方法配置为仅在特定@Test之前运行?我看到的唯一方法是解决方法:

  • 定义一个普通的设置方法,并在每个@Test方法的开头调用;
  • @BeforeMethod方法移动到新类(顶级或内部类)以及依赖它的所有方法。

两者都不理想,我想让我的测试自然分组和清洁,而不是由于缺乏替代品而拆分。

2 个答案:

答案 0 :(得分:10)

您可以使用“java.lang.reflect.Method”类型添加@BeforeMethod参数。然后,TestNG将为当前测试方法注入反射信息,包括方法名称,您可以将其用于切换。

如果添加另一个'Object'参数,您还将获得测试方法的调用参数。

您可以在TestNG文档的第5.18.1章中找到所有可能的TestNG注释方法参数。

答案 1 :(得分:3)

测试根本不是为此而设计的。从技术上讲,单个测试应该处理它本身的幂等意义,意味着它设置,测试和删除。这是一个单一的测试。但是,许多测试有时会使用相同的设置和取消方法,而其他测试在它们全部运行之前需要一个设置。这是@Before类型标记的用途。 如果您不喜欢在测试中进行设置和拆卸,那么欢迎您更好地构建自己的系统,但从技术上讲,如果某些方法需要特定的设置或拆卸,那么真的应该体现在测试中,因为它是测试通过的要求。可以调用一个设置方法,但最终,测试需要一个特定的设置以便通过它应该是显而易见的。毕竟,如果你使用特定的设置,你实际上不是在测试状态而不是代码吗?