Java TestNG-@BeforeMethod用于特定方法

Java TestNG-@BeforeMethod用于特定方法,java,spring,testng,spring-test,Java,Spring,Testng,Spring Test,我正在使用带TestNG的Spring测试来测试我们的DAO,我想在某些方法之前运行一个特定的文本fixture脚本,允许在每个方法之后回滚修改,以便测试可以自由地处理fixture数据 起初,我认为“团体”是合适的,但我已经意识到他们不是为了这个(见这个问题:) 有没有办法将@beforethod方法配置为仅在特定@Test之前运行?我看到的唯一方法是解决办法: 定义一个普通的设置方法,并在每个@Test方法开始时调用 将@BeforeMethod方法以及依赖它的所有方法移动到新类(顶级或内

我正在使用带TestNG的Spring测试来测试我们的DAO,我想在某些方法之前运行一个特定的文本fixture脚本,允许在每个方法之后回滚修改,以便测试可以自由地处理fixture数据

起初,我认为“团体”是合适的,但我已经意识到他们不是为了这个(见这个问题:)

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

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

两者都不理想,我想让我的测试自然地分组并保持干净,而不是因为缺少替代品而拆分。

测试根本不是为了这样做而设计的。从技术上讲,单个测试应该处理其本身的幂等性,这意味着它设置、测试和记录。这是一个单一的测试。然而,许多测试有时具有相同的设置和删除方法,而其他测试在运行之前需要一个设置。这是
@Before
类型标记的目的。
如果您不喜欢测试内部的设置和拆卸,那么您更欢迎构建您自己的系统,但从技术上讲,如果某些方法需要特定的设置或拆卸,那么这确实应该体现在测试中,因为这是测试通过的要求。调用设置方法是可以的,但最终,测试需要特定的设置才能通过,这一点应该是显而易见的。毕竟,如果您使用的是特定的设置,那么您实际上不是在测试状态而不是代码吗?

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

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


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

为什么线程中提到的解决方案不适合您?如果你是按组运行的,这有帮助吗?在这里,组应该工作得很好。在同一组中进行测试前、测试和测试后。我知道这篇文章很旧,但只是为了记录在案。也可以给每种方法分配不同的组。这是绝对正确的。谢谢你的信息