Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用不在类路径中的类的单元测试方法_Java_Unit Testing_Properties_Mocking_Junit4 - Fatal编程技术网

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

Java 使用不在类路径中的类的单元测试方法,java,unit-testing,properties,mocking,junit4,Java,Unit Testing,Properties,Mocking,Junit4,我有一个方法,用于检查给定的类是否是特定类型的实例。 例如,假设myClass是DBClass的一个实例,我希望返回true。 DBClass由客户在属性文件中动态定义。 因此,我正在读取属性文件,获取DBClass超类型,加载它并检查给定的类(即myClass)是否是DBClass的实例 有一件事是可以肯定的,我试图检查超类型的DBCLass在运行测试用例时不会出现在我的类路径中,因为这个DBCLass是动态的,并且是特定于客户的 我不确定如何直接测试或覆盖它。我不确定是否需要模拟属性文件 我

我有一个方法,用于检查给定的类是否是特定类型的实例。 例如,假设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); 
公共布尔isDBClass(最终类myClass){
//下面一行读取属性文件并获取db父类的类名。
字符串dbSuperClass=PropertiesReader.PropertyEnum.DB_CLASS_PARENT.toString();
//如果myClass是dbSuperClass的子类,则返回true,否则返回false。
返回loadClass(dbSuperClass).isAssignableFrom(myClass);

}您的方法的责任是:

  • 获取字符串
  • 将其传递给名为loadClass()的方法
  • 使用提供的输入参数调用isAssignableFrom()
  • 返回结果
如果您可以模拟loadClass方法,那么您就可以验证这些职责,而无需实际执行任何类加载


您可能需要进行一些重构,以使loadClass成为可模拟的,但这种方法会将这个特定的方法组合起来。

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

我认为你不能测试不在类路径中的东西,clr应该如何知道类是什么样子的。@Damokles,对于不在类路径中的类,我可以在类路径中添加一个伪类。但是在属性文件中,DB_CLASS_PARENT属性将引用真实的类。不管怎么说,让它成为Dummy课堂的参考?啊,我想我误解了你的问题。谢谢。模仿这种方法能给我覆盖范围吗?目前,我已经通过重写并返回false来删除这个方法。但我没有得到保险。