使用不在类路径中的类的单元测试方法

时间:2011-07-06 08:36:37

标签: java unit-testing properties mocking junit4

我有一个方法用于检查给定的类是否是特定类型的实例。  比方说,myClass是DBClass的一个实例,我想返回true。  DBClass由客户在属性文件中动态定义。  所以我正在读取属性文件,获取DBClass超类型,加载它并检查给定的类(即myClass)是否是DBClass的实例。

有一点可以肯定的是,我尝试检查超类型的DBCLass在运行测试用例时不会出现在我的类路径中,因为这个dbClass是动态的和客户特定的。

我不确定如何直接测试或覆盖它。我不确定是否需要模拟属性文件?

我正在使用Junit和JMock。

有关测试方法的任何建议。 方法写得像这样。

public boolean isDBClass (final Class<?> myClass) {
 //Following line reads the properties file and get the class name for db parent class.
String dbSuperClass = PropertiesReader.PropertyEnum.DB_CLASS_PARENT.toString();
// if myClass is subclass of dbSuperClass return true, false otherwise.
return loadClass(dbSuperClass).isAssignableFrom(myClass); 

}

2 个答案:

答案 0 :(得分:0)

您的方法的职责是:

  • 获取字符串
  • 将其传递给名为loadClass()的方法
  • 使用提供的输入参数
  • 调用isAssignableFrom()
  • 返回结果

如果您可以模拟loadClass方法,那么您可以验证这些职责,而无需实际进行任何类加载。

您可能需要进行一些重构才能使loadClass可以进行模拟,但是这种方法会将这种特定方法单元化。

答案 1 :(得分:0)

我现在已经找到了解决方法。 我提供了一个虚拟属性文件,它引用了我的类路径中的虚拟类。