【问题标题】:How to make a jUnit4 test case class Spring Test case class?如何制作一个jUnit4测试用例类Spring测试用例类?
【发布时间】:2011-02-22 22:18:50
【问题描述】:

我有一个 jUnit4 测试用例类(扩展 TestCase)。我正在测试一些具有 Spring D.I 和 Hibernate 的代码。不知何故,当我执行测试时,看起来一些内部事务正在回滚我的测试更改。我正在使用 HibernateTemplate 删除一条记录,但数据库中没有删除任何内容。我得到了一个建议,通过使我的类成为 Spring 测试类(使用 Spring Test Runner )并在方法调用之前使用 @Transactional 属性来使我的测试用例具有事务性。有人可以告诉我如何让我的 Junit4 测试类 Spring 测试类吗?我需要什么配置以及扩展哪个类?

提前致谢。

【问题讨论】:

  • 如果它“扩展了 TestCase”,它就是一个 JUnit 3.x 测试类。 JUnit 4.x 类不需要继承任何东西,它们使用@Test 注解。

标签: hibernate spring junit4


【解决方案1】:

扩展AbstractTransactionalJUnit4SpringContextTests 或将这些注释添加到您的测试类中:

@TestExecutionListeners(TransactionalTestExecutionListener.class)
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class })

【讨论】:

  • +1 用于指出已为事务支持配置的 AbstractTransactionalJUnit4SpringContextTests。
【解决方案2】:

扩展AbstractJUnit4SpringContextTests。我强烈推荐详细阅读Testing章节。

【讨论】:

    【解决方案3】:

    参考documentation 详细解释了有关 Spring 测试的所有内容。

    您遇到的现象是由于当测试用例类使用@Transactional 注释时,Spring 自动将测试方法包装在仅回滚事务中。这有一定的好处:您不会在测试期间损坏数据库,并且每个测试都使用相同的数据,因此您不会引入测试间依赖关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2013-05-03
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多