我正在尝试对我编写的瘦数据访问层进行单元测试。我希望我不必将DriverManager的存根注入到建立连接的类中,并且我没有可用的模拟框架。我已经检查了我对MockRunner's MockDriver的实现,它非常相似,但是当我运行测试时,我得到一个SQLException:“没有为jdbc找到合适的驱动程序:mysql:// localhost:3306。”这是存根代码:
public class DriverStub implements Driver
{
@Override
public boolean acceptsURL(String URL) throws SQLException
{
return true;
}
@Override
public Connection connect(String url, Properties info) throws SQLException
{
return new ConnectionStub();
}
@Override
public int getMajorVersion()
{
return 1;
}
@Override
public int getMinorVersion()
{
return 0;
}
@Override
public DriverPropertyInfo[] getPropertyInfo(String url, Properties info)
throws SQLException
{
return new DriverPropertyInfo[0];
}
@Override
public boolean jdbcCompliant()
{
return true;
}
}
调用代码的一个片段:
Connection connection = null;
try
{
Class.forName(driver).newInstance();
}
...
try
{
connection = Drivermanager.getConnection(...);
}
...
答案 0 :(得分:2)
Driver
实现应在其静态初始化程序中注册Driver
到DriverManager.registerDriver的实例。
public class DriverStub implements Driver {
static {
java.sql.DriverManager.registerDriver(new DriverStub());
}
...
}
这是一个完整而彻底的黑客,但你去了。就个人而言,我建议忽略DriverManager
并直接链接到驱动程序。
答案 1 :(得分:0)
这似乎比它的价值要大得多。为什么要存根DriverManager?那测试是什么?如何通过不使用真正的驱动程序管理器来证明数据访问层的价值?您不想连接到数据库进行测试吗?
我将加载JDBC驱动程序并完成它。这对我来说似乎是嘲笑。