我正在尝试围绕一些被审计的实体构建一些测试.我的问题是envers只审计事务提交.
我需要创建/编辑一些测试对象,提交事务然后检查修订.
与envers进行集成测试的最佳方法是什么?
更新:这是我想要实现的非常糟糕的,非确定性的测试类.我更愿意这样做,而不依赖于测试方法的顺序
首先在单个事务中创建帐户和account_transaction.两个审计条目均适用于修订版1.
第二次更新了新事务中的account_transaction.经审计的条目为修订版2.
第三,在修订版1中加载审计帐户并对其执行某些操作.
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/testApplicationContext.xml"})
public class TestAuditing {
@Autowired
private AccountDao accountDao;
@PersistenceContext
private EntityManager entityManager;
@Test
@Rollback(false)
public void first() {
Account account = account("Test Account", "xxxxxxxx", "xxxxxx");
AccountTransaction transaction = transaction(new Date(), Deposit, 100, "Deposit");
account.setTransactions(newArrayList(transaction));
accountDao.create(account);
}
@Test
@Rollback(false)
public void second() {
Account account = accountDao.getById(1L);
AccountTransaction transaction = account.getTransactions().get(0);
transaction.setDescription("Updated Transaction");
accountDao.update(account);
}
@Test
public void third() {
AuditReader reader = AuditReaderFactory.get(entityManager);
List<Number> accountRevisions = reader.getRevisions(Account.class, 1L); …
Run Code Online (Sandbox Code Playgroud) 我看到 activemq 的临时存储利用率为 100%(配置为 100mb),并且 activemq 客户端正在阻塞。这个 100% 使用率永远保持不变,我不知道发生了什么
我有一条骆驼路线,它使用 JmsTransactionManager 从队列(QUEUE.IN)中消耗。
public final class RouteUnderTest extends RouteBuilder {
@Override
public void configure() throws Exception {
from("activemq-transacted:QUEUE.IN")
.bean(myBean)
.to("activemq:QUEUE.OUT");
}
}
Run Code Online (Sandbox Code Playgroud)
在处理来自该队列的消息时,我调用一个 spring 集成客户端(myBean),其配置如下
<int:gateway id="myBean" service-interface="MyBean">
<int:method name="request" request-channel="channel"/>
</int:gateway>
<int:chain input-channel="channel">
<int:transformer ref="transformedToJsonHere"/>
<jms:outbound-gateway request-destination-name="QUEUE.MYBEAN"
receive-timeout="5000"
explicit-qos-enabled="true"
time-to-live="5000"
delivery-persistent="false"/>
<int:transformer ref="transformedToAnObjectHere"/>
</int:chain>
Run Code Online (Sandbox Code Playgroud)
我的代理配置为使用 LevelDB,并具有以下使用限制:
<persistenceAdapter>
<levelDB directory="${activemq.data}/leveldb"/>
</persistenceAdapter>
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage percentOfJvmHeap="70"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="500 mb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="100 mb"/>
</tempUsage>
</systemUsage>
</systemUsage>
Run Code Online (Sandbox Code Playgroud)
当我的路由消耗消息,然后尝试将非持久消息放入 QUEUE.OUT …
我们的测试套件正在快速增长,我们已经达到了功能测试依赖于其他系统的程度.
我们使用gradle测试任务来使用包含和排除过滤器来运行这些测试,但这变得很麻烦,因为我们必须以特定方式命名我们的测试.
我们目前的方法是以下列方式命名我们的测试:
class AppleSingleServiceTest {}
class BananaMultiServiceTest {}
class KiwiIntegrationTest {}
Run Code Online (Sandbox Code Playgroud)
然后在相关任务中包含测试
include '**/*SingleServiceTest.class'
include '**/*MultiServiceTest.class'
include '**/*IntegrationTest.class'
Run Code Online (Sandbox Code Playgroud)
是否可以通过查看注释在gradle中找到测试类?
@SingleServiceTest
public class AppleTest {}
Run Code Online (Sandbox Code Playgroud)
我认为任何未注释的测试都将作为正常的单元测试运行,因此如果您忘记注释更多功能测试,它将失败
单个服务测试的一个示例是硒测试,其中SUT的任何外部依赖性都是存根的
多服务测试的一个示例是一些但可能不是所有外部依赖项都没有存根的测试