假设我有一个传统的JUnit测试套件,其中包括以下测试:解决Java类路径地狱
public class AwesomeTest {
public void testBusinessLogic() {
...
[awesome mocking library]
...
}
}
public class AmazingTest {
public void testBusinessProcess() {
...
[amazing xml operation]
...
}
}
现在假设真棒嘲讽库依靠真棒BCEL字节码生成库,包含类org.useful.XMLClass
,这个库有版本1的XMLClass。
现在假设Amazing Xml操作依赖于包含类org.useful.XMLClass
的Amazing Xml库,并且此库具有XML Class的第2版。
同时假定类2版本与版本1向后兼容 - 所以它永远版本在classpath中具有更高的优先级 - 它打破了其他版本的依赖关系。
另外,假设有400次测试,依靠真棒嘲弄库 - 所以重写不是一个理想的选择。
同时假定一些关键的业务功能,已建成以惊人的XML libary - 和强烈优选不重写。
你如何解决这个类路径地狱的情况 - 从运行蚂蚁测试分开(假设你用Ant运行它们)有两个不同的手动排序类路径和手动确定测试子组的两倍? (我打开自定义类加载器的想法 - 但似乎差不多的水平可维护性与蚂蚁的解决方案的双定制类路径)
是的,多数民众赞成在地狱。错误似乎与字节码发生器捆绑在一起的XML文件。我会建议更新你的模拟库。 – Perception 2013-02-28 12:26:10
也许你可以得到“Awesome BCEL字节码生成库”的源代码,并创建一个依赖类org.useful.XMLClass的重命名版本的分支。 – gontard 2013-02-28 12:28:52
我同意没有简单的答案。也许你可以尝试使用自定义类加载器......但这看起来似乎比它的价值更努力。我会用XML库或模拟操作的新库重写测试。 – RudolphEst 2013-02-28 12:43:14