如何基于可选依赖项验证行为

时间:2017-12-24 14:06:01

标签: java junit classpath

我的代码根据可选depdency的可用性而有所不同(使用Class.forName(...)进行检查)。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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动态生成合成课程。