【问题标题】:How to check if my transactional methods really support transactions?如何检查我的事务方法是否真的支持事务?
【发布时间】:2010-01-06 13:38:23
【问题描述】:

我正在使用 Spring 3.0,并且我有一组这样的方法:

@Transactional (value = "authTransactionManager")
public void remove(User user) {
    ...
}

我使用 2 个不同的事务管理器并指定必要的管理器(上面示例中的authTransactionManager)。

我很好奇如果我指定不存在的经理会发生什么。我预计编译异常或运行时异常,但一切正常。这就是为什么我怀疑我的方法是否支持任何交易。

如何测试它? (也许,spring 太聪明了,当指定不存在的经理并且我所有的怀疑都没有根据时,它会使用任何可用的经理?)

【问题讨论】:

    标签: java spring testing transactions aop


    【解决方案1】:

    你可以打开调试级别的日志,这通常是我在调试这类事务问题时所做的!

    Spring 非常擅长记录事务。

    【讨论】:

    • +1,您的回答对我很有帮助。我唯一不知道的是使用了哪个事务管理器:我在日志中看到两个管理器都已加载,而且我还看到只使用了其中一个(即我只看到 1 次提交)。但日志不包含有关使用哪一个的信息。
    【解决方案2】:

    这里有 2 个选项:

    (1) 使用集成测试。您可以使用dbUnit 之类的工具将数据加载到数据库中,然后使用事务针对数据库编写测试。 (我们一直这样做是为了测试我们的 XML Hibernate 映射。事实上,测试是作为自动构建的一部分执行的。)

    (2) 使用FIT tests。这些是完全不同的野兽:系统的功能测试。 FIT 测试需要“夹具”作为测试和系统之间的粘合剂,但它们可以帮助解决这个问题。 (在这种情况下可能有点矫枉过正。)

    在这两种情况下,您都可以选择 (a) 进行一些快速而简单的测试作为健全性检查,或者 (b) 设计一个测试子系统以用于您的自动化构建。 (对于案例 (b),我们同时使用集成测试和 FIT 测试)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多