java - 如何根据可选依赖项验证行为

标签 java junit classpath

我的代码根据可选依赖项的可用性而表现不同(使用 Class.forName(...) 检查)。

是否可以在 junit 中验证此行为,或者是否有一个库可以促进此操作?

我希望有一种比使用自定义类加载器引导新的 junit 进程更好的方法。

或者,我可以模拟一个返回类名进行检查的方法。然后在测试中我可以使用虚拟类或真实类。不过,我更喜欢使用缺少的可选依赖项进行“真实”测试。

最佳答案

通过创建自定义类加载器,您可以完全控制提供给需要检查某个类是否存在以适应其行为的类/方法的类路径。

查看 Spark library 中的此代码这允许他们动态改变类路径,甚至可以选择反转类路径解析的默认顺序(通常是父级优先)。使用这样的策略,您可以使用类似的语句轻松模拟类路径

ClassLoader classLoader = Thread.currentThread().getContextClassLoader() 
ClassLoader mutableClassLoader = new MutableURLClassLoader(urls, classLoader);
// ... manipulate the classpath in mutableClassLoader ...
Thread.currentThread().setContextClassLoader(mutableClassLoader);
// everything is set up, you can now call the method you want to test

如果需要,您甚至可以使用 JavaCompiler 即时生成合成类.

关于java - 如何根据可选依赖项验证行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47961250/

相关文章:

java - 自动将数字对象转换为其 native 对象

java - 我怎样才能在 Java 中做一个 "return back"按钮?

junit - 使用 Spring Boot 和 JUnit 从 Controller 类模拟存储库

java - 如何编写具有渐进状态的 JUnit 测试

java - 无法在 Tomcat 的应用程序中加载 .properties

java - 在 Eclipse 中更改类路径

java - 在Java中的类中声明数组的正确方法是什么

java - findViewById (NullReference) 无法引用第二个 View 的 UI 元素

java - 将测试套件应用于接口(interface)的实现

java - 强制 java jar 在 EMR 上不使用类路径包