【问题标题】:Integration Test with Transactional事务集成测试
【发布时间】:2014-09-27 20:52:44
【问题描述】:

我有以下场景/系统。 一个 Rest Service 提案,在 Spring 安全配置之后,带有 Spring JPA 和一个 postgres DB。

现在我的场景制作了一个
用户登录 1
注销用户 1
用户 1 的登录
对资源提出请求
注销用户 1
用户 2 的登录
对其他资源发出请求
注销用户 2

这一切都在一个测试方法上(我知道这样做可能是错误的)。 现在让我感到困惑的是,他有一些加密/解密方法来检索用户,它们是字段。现在我看到的是,在用户 1 的第一次登录时,用户通过了解密代码(这没关系),在用户 1 的第二次登录后,我们没有通过解密代码(但用户已登录) . (这有点奇怪,我预计用户会通过解密代码),之后通过访问资源,用户 2 也被解密(这是正确的)。 但是通过登录用户2,用户不会传递解密代码(我有一个例外,因为通常加密的字段,现在被解密)异常可以是好的,但不是字段被解密的事实.

现在只有当我在@Transactional 下设置测试时才会抛出异常。 当我进行测试而不是 @Transactional 时,行为相同是正确的(每次登录用户都会被解密。)
现在我想:“测试不是@transactional 是合乎逻辑的”,但我有点担心我有缓存问题:可以吗?我没有任何缓存配置(仅适用于 ACL,不适用于用户管理)。 hibernate的二级缓存也被关闭了。

有没有办法找出某些缓存或内存强度是否复杂?

发送

【问题讨论】:

    标签: spring-security spring-data-jpa spring-test


    【解决方案1】:

    没有看到您的实际代码和配置,我无法准确评估发生了什么;但是,我可以为您提供以下一般信息...

    如果您正在模拟一个用例来模拟与您的应用程序的不同外部连接(即,两个独立用户通过 REST API 连接到您的应用程序),那么您将不希望使用 @Transactional 注释您的测试方法。

    使用@Transactional 注释测试方法会导致测试方法中的所有 方法调用在相同 事务[0] 中执行。因此,JPA 存储在一级缓存中的任何项目都将在您的测试方法范围内跨方法调用进行缓存。

    希望这会有所帮助!

    山姆

    [0] 此语句基于以下假设:您的测试方法直接或间接调用的方法均未配置为在新事务中运行。

    【讨论】:

    • Txs 为您提供反馈。你给了我一点保证,我正在做的事情是朝着正确的方向前进。发送 :)
    猜你喜欢
    • 2021-12-08
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    相关资源
    最近更新 更多