Java Testng&&;Spring上下文单元测试->;在测试方法之前和之后执行sql

Java Testng&&;Spring上下文单元测试->;在测试方法之前和之后执行sql,java,spring,unit-testing,testng,Java,Spring,Unit Testing,Testng,当使用JUnit作为SpringRunner时,在任何测试方法之前和之后都可以执行脚本 @Test @SqlGroup([ @Sql(scripts = ["classpath:clean_db.sql", "populate_data.sql"]), @Sql(scripts = ["classpath:clean_db.sql"], executionPhase = AFTER_TEST_METHOD) ]) 但是,当使用te

当使用JUnit作为SpringRunner时,在任何测试方法之前和之后都可以执行脚本

@Test
    @SqlGroup([
            @Sql(scripts = ["classpath:clean_db.sql", "populate_data.sql"]),
            @Sql(scripts = ["classpath:clean_db.sql"], executionPhase = AFTER_TEST_METHOD)
    ])
但是,当使用testngframework并运行spring上下文测试时,此注释不起作用,因为testng使用AbstractTestNGSpringContextTests而不是SpringRunner


testng或任何其他util中是否有任何类似的注释,用于在测试前后执行脚本?

是否有理由在testng注释@AfterTest或@AfterMethod(取决于您的需要)中执行脚本不起作用


第一个脚本将在套件运行下的所有测试之后运行,第二个脚本将在每个测试方法之后运行。

是否存在在TestNG annotations@AfterTest或@AfterMethod(取决于您的需要)中执行脚本不起作用的原因


第一个将在套件下的所有测试运行之后运行,第二个将在每个测试方法之后运行。

这也适用于TestNG,它不与框架绑定,因为它是由在TestNG和JUnit中透明运行的
TestExecutionListener执行的。
。clean_db.sql会简单地删除所有表吗?如果是这样,它可以替换为
@DirtiesContext(classMode=DirtiesContext.classMode.AFTER\u EACH\u TEST\u METHOD)
。而populated b.sql可以在
@Before
方法中运行不确定@DirtiesContext()是否有帮助。sql是针对真正的oracle而不是嵌入式系统执行的,但是,它不能与testng一起工作,这很奇怪,因为AbstractTestNGSpringContextTests是Spring的一个类,@SqlGroup是Spring的一个注释。我想,我需要提供一个简单的github示例项目,它也应该与TestNG一起工作。它不与框架绑定,因为它是由一个在TestNG和JUnit中都透明工作的
TestExecutionListener执行的?如果是这样,它可以替换为
@DirtiesContext(classMode=DirtiesContext.classMode.AFTER\u EACH\u TEST\u METHOD)
。而populated b.sql可以在
@Before
方法中运行不确定@DirtiesContext()是否有帮助。sql是针对真正的oracle而不是嵌入式系统执行的,但是,它不能与testng一起工作,这很奇怪,因为AbstractTestNGSpringContextTests是Spring的一个类,@SqlGroup是Spring的一个注释。我想,我需要提供一个简单的github示例项目,在有些情况下,我不想在每个方法之后运行脚本。但实际上,前后两种方法都可以。但是,我仍然需要一些助手方法来运行脚本。如果要在@AfterMethod方法中运行脚本,可以在每个方法中使用标志来确定。是的,我想你需要一个助手来完成这个查询。注释的全部要点是声明性的=)手动脚本执行,特别是一些标志太臭了!在某些情况下,我可能不希望在每个方法之后运行脚本。但实际上,前后两种方法都可以。但是,我仍然需要一些助手方法来运行脚本。如果要在@AfterMethod方法中运行脚本,可以在每个方法中使用标志来确定。是的,我想你需要一个助手来完成这个查询。注释的全部要点是声明性的=)手动脚本执行,特别是一些标志太臭了!