所有MyService方法都是事务性的.下面的junit测试,获取项目数,保存新项目,并获取项目数,以确保计数增加1.
public class MyTest extends ServiceTest{

    1. int countBefore = myService.getCount();    //return n
    2. myService.add(item);                       //item is really added to DB
    3. int countAfter  = myService.getCount();    //return n (sometimes n+1)
}

@Transactional(propagation=Propagation.REQUIRES_NEW,isolation=Isolation.READ_COMMITTED)
getCount(){…}

@Transactional(propagation=Propagation.REQUIRES_NEW,isolation=Isolation.SERIALIZABLE)
add(){…}
@Ignore
@ContextConfiguration(locations = { "file:src/main/resources/xxx-context.xml","file:src/main/resources/xxx-data.xml","file:src/main/resources/xxx-services.xml"  })
@TransactionConfiguration(transactionManager = "txManager",defaultRollback = false)
@TestExecutionListeners( {  DependencyInjectionTestExecutionListener.class,DirtiesContextTestExecutionListener.class,TransactionalTestExecutionListener.class,TestListener.class})

public class ServiceTest extends AbstractUT{
@Ignore
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners( {TestListener.class})
public class AbstractUT{

调试时(3.)返回n 1,这就是我想要的.但是在没有调试的情况下运行测试时我会得到n.

甚至有时在运行测试时我得到n 1,下次我得到n并且当比较两次执行之间的std输出时,它看起来完全一样.我启用了log4j.logger.org.springframework.transaction = TRACE,我可以看到:

Initializing transaction synchronization
Getting transaction for MyService.getCount
...
Completing transaction for MyService.getCount
Clearing transaction synchronization

...

Initializing transaction synchronization
Getting transaction for MyService.add
...
Completing transaction for MyService.add
Clearing transaction synchronization

...

Initializing transaction synchronization
Getting transaction for MyService.getCount
...
Completing transaction for MyService.getCount
Clearing transaction synchronization

因此交易一个接一个地执行,但是(3.)怎么可能看不到保存的项目?

交易管理在我的测试类中设置为:https://stackoverflow.com/a/28657650/353985

我怎样才能找到出错的地方?
谢谢!

解决方法

有类似的问题,但在我的情况下,它没有回滚.好像你忘记添加@Transactional了.来自文档( link)

交易管理

In the TestContext framework,transactions are managed by the
TransactionalTestExecutionListener which is configured by default,
even if you do not explicitly declare @TestExecutionListeners on your
test class. To enable support for transactions,however,you must
configure a PlatformTransactionManager bean in the ApplicationContext
that is loaded via @ContextConfiguration semantics (further details
are provided below). In addition,you must declare Spring’s
@Transactional annotation either at the class or method level for your
tests.

以下是上面链接的示例.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@TransactionConfiguration(transactionManager="txMgr",defaultRollback=false)
@Transactional
public class FictitIoUsTransactionalTest {

@BeforeTransaction
public void verifyInitialDatabaseState() {
    // logic to verify the initial state before a transaction is started
}

@Before
public void setUpTestDataWithinTransaction() {
    // set up test data within the transaction
}

@Test
// overrides the class-level defaultRollback setting
@Rollback(true)
public void modifyDatabaseWithinTransaction() {
    // logic which uses the test data and modifies database state
}

@After
public void tearDownWithinTransaction() {
    // execute "tear down" logic within the transaction
}

@AfterTransaction
public void verifyFinalDatabaseState() {
    // logic to verify the final state after transaction has rolled back
}

}

java – 在非调试模式下,Spring @transaction在junit中没有按预期工作的更多相关文章

  1. Android studio – Faild to resolve:com.android.support:design:26.0.1错误

    我有一个错误叫:我的androidstudio版本是3.0beta1.我的gradle文件如下:我想把“设计”放到我的项目中,但我不能这样做.我该怎么做?解决方法尝试改变和或者不要更改为bulidToolsversion更改依赖项

  2. Android单元测试的正确方法

    我知道这对所有Android开发者来说都是一个乏味的话题.但究竟什么是Android测试的正确方法?解决方法这个问题和我的回答,与Android没有任何关系,但这是一件好事.我略微修改了你的假设,但原理是一样的.>70%单元测试>20%集成测试>10%UI测试应该是70%吗?最后,检查您的UI是否按预期工作.你在这个级别显示什么并不重要.只要在用户未登录您的罚款时显示登录屏幕.这通常被称为TestPyramid,是你所描述的,只是减去了明显的比例.

  3. android – 使用Robolectric测试ActionBarActivity时出错

    我正在使用Robolectric来测试我的应用程序中的活动.该活动扩展了ActionBaractivity.当我测试活动时,我得到错误:“IllegalStateException:你需要在这个活动中使用Theme.AppCompat主题(或后代).”我的测试环境是:AndroidStudio0.8.6,Robolectric2.4-SNAPSHOT,support-v4库版本20.0,appco

  4. android.test.AndroidTestCase中的方法setUp没有被模拟

    notmocked’错误,并建议将以下内容放入build.gradle:这可以在从命令行启动时运行测试但是当我使用rightclick从AndroidStudio运行测试类时–>跑.这样,我又得到了同样的错误:关于如何解决这个问题的任何想法?

  5. Android Studio中的Gradle Error:找不到ID为’com.android.library’的插件

    当我尝试在AndroidStudio中构建Android库项目时,我收到以下Gradle错误:我对Gradle很新,这对我来说很困惑.为什么会这样?build.gradle文件如下:解决方法您的问题是您使用的顶级文件无法使用此类插件.在AS中你有这样的结构:在您的顶级文件中,您可以使用:在lib/build.gradle中,您可以使用问题中发布的代码:最后在您的settings.gradle中你也可以参考thisquestion.

  6. android – Espresso – 点击对话框的按钮

    我想测试Android6的权限,但我找不到使用Espresso点击“允许”按钮的方法.有没有办法做到这一点?

  7. android – 尝试单击导航按钮时Espresso AmbiguousViewMatcherException

    //这里的布局//测试输出解决方法这不是Espresso中的错误.视图层次结构清楚地显示了具有相同ID的两个视图.这可能是由于视图位于ViewPager内部,而ViewPager是一个AdapterView.因此可以预期多个实例.要解决此问题,请在匹配视图时更具体.仅仅通过ID无济于事.由于主页按钮的其他ImageView不可见,因为它的父级是GONE,您可以简单地匹配:

  8. Android gradle build:在APK LICENSE.txt打包期间重复文件

    我正在尝试使用以下gradle构建文件构建Android测试运行时我收到以下错误:Error:duplicatefilesduringpackagingofAPK…Pathinarchive:LICENSE.txtOrigin1:….gradle/caches/artifacts-24/filestore/junit/junit/4.11/jar/4e031bb61df09069aeb2bffb4

  9. android – 无法解决:编译’com.google.firebase:firebase-config:9.2.1′

    我在Gradle文件中添加Firebse远程配置SDK时出现以下错误它将显示错误错误:(25,13)无法解析:com.google.firebase:firebase-config:9.2.1在ProjectStructure对话框的FileShow中显示Gradle文件:错误Image解决方法@RiyazAhamed谢谢.解决方案是从sdk经理更新“GooglePlay服务”和“GoogleRe

  10. android-studio – 运行Android检测测试时出现“未找到测试”错误

    我是测试的初学者.我在androidstudio中为登录活动创建了一个简单的测试用例.但我得到了一个错误,我无法解决它.这是我的测试代码.帮助将非常感激.这是我的错误:这是我的gradle文件:解决方法您忘记将AndroidJUnitRunner设置为默认的测试工具运行器.https://developer.android.com/topic/libraries/testing-support-l

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部