技术开发 频道

使用 JUnit 对规则进行单元测试

  为了测试” JVM initial heap size rating algorithm ”,我们需要获得三个输入参数。然而,获取这三个参数并不是那么容易。

  为了简化测试环境,我们利用 Mock 对象来设置这些参数。

  Mock 对象是单元测试经常用到的一种技术,Mock 对象能模拟实际对象的行为,并且提供了额外的行为控制接口。还有一个常用到的词是 Dummy 对象。 Mock 和 Dummy 的含义经常被混淆。在这里,我们认为 Dummy 对象没有提供额外的行为控制接口。

  对于” JVM initial heap size rating algorithm ”,我们需要一个 Mock 类,它的行为与“ InitialHeapSize.java ”相同(“ InitialHeapSize.java ”是 “ JVM initial heap size rating algorithm ”的 Java 代码)。我们把这个 Mock 类命名为“ MockInitialHeapSize.java ”。一个 Client 类可以把“ initialHeapSize ” , “ currentMemoryPoolSize ” , 和“ overallMemoryOnPartition ” 直接设置到“ MockInitialHeapSize ”对象中。参见清单 2

  清单 2. MockInitialHeapSize.java

1 public class MockInitialHeapSize extends InitialHeapSize {
2     // 设置 InitialHeapSize
3     public void setInitialValue(String initialValue){
4         this.initialValue = initialValue;
5     }
6     // 设置 MemoryPoolSize
7     public void mockSetMemoryPoolSize(String size) {
8         try{
9             this.currentSettingOfMemoryPoolSize=Float.parseFloat(size);
10         }catch(NumberFormatException ne){
11             Advisor.getLogger().severe("size: "+size+" are not an float value.");
12         }
13     }
14     // 设置 OverallMemory
15     public void mockSetOverallMemory(String size) {
16         try{
17             this.overallMemoryOnPartition=Float.parseFloat(size);
18         }catch(NumberFormatException ne){
19             Advisor.getLogger().severe("size: "+size+" are not an float value.");
20         }
21     }
22     ……
23 }

  将测试数据保存到配置文件中

  正如我们在文章开头提到的,我们希望把测试数据保存成格式化的形式,以便对这些数据进行维护和复用。表 1展示了用一个 Excel 文件 “ MockInitialHeapSize_rating.xls ” 保存所有的测试数据的例子。 这个文件完全可以用于功能测试的文档编写。

  表 1. JVM initial heap size 测试数据

setInitialValuemockSetOverallMemorymockSetMemoryPoolSizeresult
3192925
311231235
311241245
3295955
321271273
321281283
471401405
471871873
471881883
481431435
481911913
481921921
491461465
491951953
491961961
1024307130715
1024409540953
1024409640961
1025307430745
1025400940093
1025410041003
1537461046105
1537614761475
1537614861485

  表 1中,每一行都代表了一组测试数据,包括输入参数和期望结果。三个输入参数“initialHeapSize”,“currentMemoryPoolSize”,“overallMemoryOnPartition”分别保存到了三列中:“setInitialValue”,“mockSetOverallMemory ”和“mockSetMemoryPoolSize”。期望结果保存到了“result”列 ,测试代码将从这个文件中获取测试数据。

  配置文件的格式是可以变化的,只需要提供相应的 SettersMap 和 SettersMapFactory 类就可以了。

0
相关文章