gpt4 book ai didi

java - 我可以 "replace"来自静态代码之外的 Java 类吗?

转载 作者:行者123 更新时间:2023-11-28 20:37:06 24 4
gpt4 key购买 nike

我有一个要测试的应用程序:

import foo.ExtClass;
public class App {
public static void main(String[] args) {
ExtClass ext = new ExtClass();
...
}
}

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

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

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

最佳答案

作为一个选项,您可以使用自定义类加载器,它将用测试类替换您的类。所以基本上不是从您的应用程序包中加载 ExtClass,您的类加载器将从您的测试包中加载与模拟实现相同的类。

这是一个例子:

How to replace classes in a running application in java ?

还有非常有用的教程:https://zeroturnaround.com/rebellabs/reloading-objects-classes-classloaders/

关于java - 我可以 "replace"来自静态代码之外的 Java 类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50212076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com