首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以从静态代码之外“替换”Java类吗?

我可以从静态代码之外“替换”Java类吗?
EN

Stack Overflow用户
提问于 2018-05-07 10:30:31
回答 2查看 175关注 0票数 1

我有一个应用程序我想测试:

代码语言:javascript
复制
import foo.ExtClass;
public class App {
  public static void main(String[] args) {
     ExtClass ext = new ExtClass();
     ...
  }
}

我想为这个应用程序编写一个单元测试,但是我不想使用foo.ExtClass,而是为类使用另一个模拟实现。

通常,我会根据可以在单元测试中控制的某些配置,使用工厂来实例化类。但是,在这种情况下,我无法修改经过测试的应用程序

我在考虑如何编写一个定制的类加载器来加载模拟类,而不是真正的类--不确定在不对测试的应用程序进行任何修改的情况下这是否可能,以及如何加载。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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/

票数 1
EN

Stack Overflow用户

发布于 2018-05-09 11:10:45

我最终使用的方法是:使用foo.ExtClass的模拟实现和单元测试创建一个单独的项目。

这样,在真正的实现之前,模拟实现就出现在类路径中,而原始(经过测试的)项目没有受到任何影响。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50212076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档