首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带Mockito的DriverManager

带Mockito的DriverManager
EN

Stack Overflow用户
提问于 2018-06-03 20:48:12
回答 1查看 110关注 0票数 0

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

代码语言:javascript
复制
java.sql.Driver underlayingDriver = mock(java.sql.Driver.class);
underlayingDriver = mock(java.sql.Driver.class);
DriverManager.registerDriver(underlayingDriver);

和用法:

代码语言:javascript
复制
List<java.sql.Driver> driversInManager = Collections.list(DriverManager.getDrivers());

问题发生在JDK的内部部分,因为它试图通过类加载器加载类:

代码语言:javascript
复制
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调用者类不同。

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

EN

回答 1

Stack Overflow用户

发布于 2018-06-05 05:47:33

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

也许你可以通过创建一个伪驱动类来解决这个问题:

代码语言:javascript
复制
interface MyDriver extends java.sql.Driver {}

并创建该类的mock。这样,您的类加载器和驱动程序应该是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50666588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档