当前位置: 首页 > 面试题库 >

@Before和@Transactional

姚永年
2023-03-14
问题内容

我有

@RunWith(SpringJUnit4ClassRunner.class)
@TransactionConfiguration(defaultRollback = true, transactionManager = "transactionManager")

   @Before
   @Transactional
   public void mySetup() {
      // insert some records in db
   }

   @After
   @Transactional
   public void myTeardown() {
      // delete some records
   }

   @Test
   @Transactional
   public void testMy() {
      // do stuff
   }

我的问题是:mySetup,testMy和myTeardown是否都将在同一事务中运行?似乎他们应该这样做,但是我遇到了一个奇怪的错误,这可能表明他们正在互相踩踏。


问题答案:

是的,这三种方法将在同一事务中运行。请参阅参考文档中的TestContext Framework
/事务管理
部分:

事务
执行任何before方法(例如,用JUnit的@Before注释的方法)和任何after方法(例如,用JUnit的@After注释的方法)

因此@TransactionalmySetup()和上的注释myTeardown()是多余的,甚至可能被误导,因为它们的事务性由当前正在执行的单个测试方法确定。

这是因为(负责启动/完成事务的)beforeTestMethod()和的afterTestMethod()回调分别在JUnit的方法TransactionalTestExecutionListener之前@Before和JUnit的@After方法之后执行。



 类似资料:
  • 问题内容: 我刚刚看到了包含标签的CSS代码。我看着MDN看看是什么,但我真的不明白。 有人可以解释它是如何工作的吗? 它会在我们通过CSS选择之前创建DOM元素吗? 问题答案: 根据这些文档,它们是等效的: 唯一的区别是CSS3中使用了双冒号,而单冒号是旧版本。 推理: CSS 3中引入了:: before表示法,以便在伪类和伪元素之间建立区别。浏览器还接受:在CSS 2中引入的表示法。

  • 问题内容: 这是我的CSS: 工作,现在到处(用这个在我的网站),除了Internet Explorer 8中...... 是否有可能在IE8中使用nth-child?这是该浏览器的最差版本,无法正常工作,我找不到解决方法。 @ edit2:我刚刚注意到 实际上是在IE8中工作!但是这个: 不管用。那么发生了什么? 问题答案: 您可以(ab)使用相邻的同级组合器()通过可在IE7/ 8中使用的CS

  • 描述 (Description) :before伪元素用于在元素之前插入一些内容。 例子 (Example) 以下是演示如何使用:before元素之前在任何元素之前添加一些内容的示例。 <html> <head> <style type = "text/css"> p:before { content: url(/images/bulle

  • 测试此日期是否在指定日期之前。 语法 (Syntax) public boolean before(Date when) 参数 (Parameters) when - 约会 返回值 (Return Value) 当且仅当此Date对象表示的时刻严格早于when; false表示的时刻when; false 否则是when; false 。 例子 (Example) 以下是此方法的使用示例 - c

  • 描述 (Description) before( content )方法在每个匹配元素之前插入内容。 语法 (Syntax) 以下是使用此方法的简单语法 - <i>selector</i>.before( content ) 参数 (Parameters) 以下是此方法使用的所有参数的说明 - content - 要在每个目标之前插入的内容。 这可以是HTML或文本内容 例子 (Example)

  • Before注解用来对拦截器进行配置,该注解可配置Class、Method级别的拦截器,以下是代码示例: // 配置一个Class级别的拦截器,她将拦截本类中的所有方法 @Before(AaaInter.class) public class BlogController extends Controller { // 配置多个Method级别的拦截器,仅拦截本方法 @Before({