我正在为我的服务编写单元测试。
@Test
@Rollback(value = true)
public void testMethod()
{
// insert test data
myService.Method(); // read/write from DB
// asserts go here
}
当应用程序运行时,每次进入方法A都会创建一个新的事务。而是在单元测试执行期间——当test testMethod进入时。所以方法A不会创建新的。为了进行正确的测试,我需要在每次调用内部测试服务之前清除缓存。我不想在每个单元测试中的任何服务调用之前编写Session.clear()。这里的最佳实践是什么?
有几种方法:
>
手动退出缓存
@Autowired private CacheManager cacheManager;
public void evictAllCaches(){
for(String name : cacheManager.getCacheNames()){
cacheManager.getCache(name).clear();
}
}
关闭集成测试配置文件的缓存
spring.cache.type=NONE
/** * Disabling cache for integration test */
@Bean public CacheManager cacheManager() {
return new NoOpCacheManager();
}
使用@DirtiesContext
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
class CacheAffectedTest { ...
在这种情况下,Spring上下文在我的度量中的每个测试和测试时间增加三倍后重新创建。
参见Spring缓存和集成测试以及@DirtiesContext快速指南
EntityManager有一个方法clear(),它将删除所有持久性上下文:
清除持久性上下文,导致所有受管实体分离。对尚未刷新到数据库的实体所做的更改将不会持久化。
如果您在该方法之后调用查询,它将直接来自数据库。而不是从缓存中。
如果您想在每次测试之前运行这个,请考虑使用JUnit@Rule,方法是子类化ExternalResource,并在每个before()
或after()
上运行该方法。您可以在所有数据库测试中重用它。
在Spring Boot应用程序中,我访问Hibernate会话,如下所示:https://stackoverflow.com/a/33881946/272180 我的单元测试类类似于以下自动取款机: 引用具有用于运行Spring Boot应用程序的main方法的类。
问题内容: 在Python中使用模块时,如何暂时禁用单个单元测试? 问题答案: 单个的测试方法或类都可以使用装饰器禁用。 有关其他选项,请参阅文档“跳过测试和预期的失败”。
问题内容: 问题: 当我两次运行相同的go测试时,第二次运行根本没有完成。结果是第一次运行时的缓存结果。 链接 我已经检查过https://golang.org/cmd/go/#hdr- Testing_flags, 但是没有cli标志用于此目的。 题: 是否有可能强制执行测试以始终运行测试而不缓存测试结果。 问题答案: 测试标志docs中描述了一些选项: :使所有测试结果失效 在测试运行中使用不
我正在尝试创建一个简单的安全spring boot网络项目。我可以很好地启动应用程序,安全性也很好地工作。但是,我有一些组件想要在没有安全性的情况下进行测试(或者完全测试--我根本无法使测试工作)。 我得到一个异常,指示它找不到ObjectPostProcessor,因此无法调出容器。 原因:org.SpringFramework.Beans.Factory.NoSuchBeanDefinitio
Android Studio 1.1 添加了单元测试支持,详细请看 Unit testing support。本章的其余部分描述的是 “instrumentation tests”。利用 Instrumentation 测试框架可以构建独立的测试 APK 并运行在真实设备(或模拟器)中进行测试。
英文原文:http://emberjs.com/guides/testing/unit/ 单元测试用于测试代码的一个小片段,确保其功能正常。与集成测试不同,单元测试被限定在一个范围内,并且不需要Ember应用运行。 全局 vs 模块 过去如果没有作为一个全局变量加载整个Ember应用,要对应用进行测试非常困难。通过使用模块(CommonJS,AMD等)来编写应用,可以只加载被测试的部分,而不用将其