司机经理与莫基托



我正在尝试将库迁移到java 10,但是我有一些关于Mockito和Byte Buddy的错误。这是一段注册逻辑

java.sql.Driver underlayingDriver = mock(java.sql.Driver.class);
underlayingDriver = mock(java.sql.Driver.class);
DriverManager.registerDriver(underlayingDriver);

和用法:

List<java.sql.Driver> driversInManager = Collections.list(DriverManager.getDrivers());

JDK 的内部出现问题,因为它试图通过类加载器加载类:

private static boolean isDriverAllowed(Driver driver, ClassLoader classLoader) {
boolean result = false;
if (driver != null) {
Class<?> aClass = null;
try {
aClass =  Class.forName(driver.getClass().getName(), true, classLoader);
} catch (Exception ex) {
result = false;
}
result = ( aClass == driver.getClass() ) ? true : false;
}
return result;
}

模拟类加载器与 JUnits 调用方类不同。

如何从不同的类加载器加载正确的驱动程序?

这里的问题是驱动程序管理器的类加载器敏感性。对于java.类,Mockito 无法将模拟注入引导加载器,而是将模拟类移动到不同的类加载器中,因为模拟必须能够看到 Mockito 类。

也许可以通过创建伪驱动程序类来解决此问题:

interface MyDriver extends java.sql.Driver {}

并创建该类的模拟。这样,您的类装入器和驱动程序的类装入器应该是相同的。

相关内容

  • 没有找到相关文章

最新更新