-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Contribute zh CN
tydhot edited this page Feb 25, 2021
·
4 revisions
在一开始,请先sign the Contributor License Agreement。
这个项目使用代码生成技术来配置缓存的特定配置减少内存开销。但是不幸的是,IDE可能没有意识到需要在编译的时候执行这个任务。你需要在命令行中重新生成并导入,使源文件在你的项目下被生成。
gradlew build -x test
需要遵循Google的Java代码规范 并可以导入至Eclipse 或者 Intellij。
基准测试JMH 可以通过以下命令执行。
gradlew jmh -PincludePattern=[class-name pattern]
JOL 可以通过以下命令执行。
gradlew [object-layout task] -PclassName=[class-name]
为了方便期间,项目的包名应该在类名之前。
静态代码分析任务默认情况下不会被开启,需要通过以下命令以执行。
gradlew clean build -x test -Dcheckstyle -Dfindbugs -Dpmd
缓存的单元测试可以选择所有缓存的配置进行运行。一个测试方法可以使用@CacheSpec
注解,并使用CacheProvider
将以所有可能的组合执行。测试用例可以以接受CacheContext
作为参数来进行配置。
参数化测试可以利用自动验证缓存内部数据结构的优势来检测缺陷。当一个成功的用例执行完毕后将会运行CacheValidationListener
,而如果在这过程中检测到了错误将会结束测试并携带失败信息。
@Listeners(CacheValidationListener.class)
@Test(dataProviderClass = CacheProvider.class)
public final class CacheTest {
@CacheSpec(
keys = { ReferenceType.STRONG, ReferenceType.WEAK },
values = { ReferenceType.STRONG, ReferenceType.WEAK, ReferenceType.SOFT },
maximumSize = { MaximumSize.DISABLED, MaximumSize.FULL, MaximumSize.UNREACHABLE })
@Test(dataProvider = "caches")
public void getIfPresent_notFound(
Cache<Integer, Integer> cache, CacheContext context) {
// 这个测试将会至少通过72种不同的配置运行
// (2中key引用类型) * (3种value类型) * (3种最大容量策略) * (4 种添加方式)
assertThat(cache.getIfPresent(context.getAbsentKey()), is(nullValue());
assertThat(cache.stats(), both(hasMissCount(1)).and(hasHitCount(0)));
}
}