使用JUnit对规则进行单元测试2011-01-23 IBM 贾少亮引言一个例子我们先看一个例子,以了解对”规则”做单元测试的特点。我们有一个性能调优工具 WPA, 它能够将与性能相关的参数的值进行评估并推荐最优值。它的评估和推荐最优值算法都是基于”规则”的。Java 虚拟机的初始堆大小(JVM initial heap size)是一个影响 JVM 的性能的关键参数。性能调优工具 WPA 有一套规则对“ JVM initial heap size ”的值进行评估(参见清单 1)。评估的结果有 5 个级别。级别“ 1 ”表示设置良好,可提高性能;级别“ 5 ”表示设置很差,会降低性能。清单 1. JVM initial heap size rating algorithmRating3UpperBounds = 1024
Rating3LowerBounds = 48
Rating5UpperBounds = 1536
Rating5LowerBounds = 32
Rating3Multiplier = 4
Rating5Multiplier = 3
absoluteMaximumValue= Math.min(currentMemoryPoolSize, overallMemoryOnPartition)
/ Rating3Multiplier
if (initialHeapSize > absoluteMaximumValue) {
return 4;
}
if ((initialHeapSize < Rating5LowerBounds) ||
(initialHeapSize > Rating5UpperBounds)) {
rating = severe problem (5)
}
else if ((initialHeapSize < Rating3LowerBounds) ||
(initialHeapSize > Rating3UpperBounds)) {
rating = probable problem (3)
}
……
}
if (initialHeapSize * Rating5Multiplier > currentMemoryPoolSize)
{
return severe problem (5)
}
else if(initialHeapSize*Rating3Multiplier > currentMemoryPoolSize)
{
return max(rating, 3)
}
else if(initialHeapSize*Rating2Multiplier > currentMemoryPoolSize)
else {
return max(rating, 1)
}
在这一套规则中,有三个输入参数:“initialHeapSize”(“JVM initial heap size”的值),“currentMemoryPoolSize” ( 内存池的值 ) 和“overallMemoryOnPartition”(物理内存的值)。为了得到这些值,我们需要使用 Application Server 和 OS 提供的 API 。在使用这些 API 的时候,我们必须构造出 API 所需的运行环境。在这一套规则中,包含很多不同的条件(见“ IF-ELSE ”语句)。在测试时(单元测试和功能测试),我们需要至少 24 组测试数据以覆盖所有的阀值(threshold value)和等价类(equivalent class)。参见表 1。