我有一个应用程序我想测试:
import foo.ExtClass;
public class App {
public static void main(String[] args) {
ExtClass ext = new ExtClass();
...
}
}我想为这个应用程序编写一个单元测试,但是我不想使用foo.ExtClass,而是为类使用另一个模拟实现。
通常,我会根据可以在单元测试中控制的某些配置,使用工厂来实例化类。但是,在这种情况下,我无法修改经过测试的应用程序。
我在考虑如何编写一个定制的类加载器来加载模拟类,而不是真正的类--不确定在不对测试的应用程序进行任何修改的情况下这是否可能,以及如何加载。
发布于 2018-05-07 10:38:42
作为一种选择,您可以使用自定义的类加载器,它将用测试类来填充类。因此,与从应用程序包加载ExtClass不同,类加载器将使用模拟实现从测试包加载相同的类。
下面是一个示例:
How to replace classes in a running application in java ?
还有非常有用的教程:https://zeroturnaround.com/rebellabs/reloading-objects-classes-classloaders/
发布于 2018-05-09 11:10:45
我最终使用的方法是:使用foo.ExtClass的模拟实现和单元测试创建一个单独的项目。
这样,在真正的实现之前,模拟实现就出现在类路径中,而原始(经过测试的)项目没有受到任何影响。
https://stackoverflow.com/questions/50212076
复制相似问题