我正在创建一个监视某个目录的服务,当它检测到该目录中代码的更改时,它会运行目录中的所有测试。目的是它对该目录中代码的更改运行测试。因此,如果我在类中添加一个新方法然后再添加一个新测试,它应该使用新类和新测试并将其包含在其testrun中。
我该如何动态执行此操作?我可以动态加载所有测试类,扫描目录并收集测试并使用我自己的自定义动态加载器(由Reload used classes at runtime Java完成)。但是这些课程仍然是改变之前的课程。在服务开始观看之前,即在运行之前。
如何强制动态加载测试中使用的类?
答案 0 :(得分:2)
在我看来,你想在运行时更改一个类。你应该看一下this article。这种方法的问题是,重新加载的类将不再相同,因为您不能使用相同的ClassLoader
两次并使用另一个类加载器将导致类不再相同并最终导致{ {1}}。
通过针对接口编程可以避免这种情况,但您可能需要更改类设计。
如果您想重新加载所有引用的类,您可能需要覆盖ClassCastExceptions
。我现在无法测试这个非常具体的场景,但我认为所有引用的类都会调用此方法。由于默认实现只抛出ClassLoader.findClass(String name)
,因此将要求父类加载器查找该类,它将为您提供旧版本。
你可以试试这个:
ClassNotFoundException