用于java的SQL服务器存根

时间:2011-02-14 08:07:53

标签: java sql-server jdbc stub

我有一个通过JDBC驱动程序使用MSSQL服务器的java应用程序。我可以用某种存根进行测试吗?例如,我想测试我的应用程序如何处理连接错误,SQL服务器磁盘空间和其他异常的情况。使用真正的SQL服务器来模拟它是非常困难和复杂的。

由于

6 个答案:

答案 0 :(得分:1)

您可以使用模拟库(例如https://mocquer.dev.java.net/)针对您的DAO或存储库返回模拟Connection对象编写单元测试。

为了使这项工作正常并为您提供实际的测试覆盖率,您需要一个非常干净且分离的应用程序架构。

答案 1 :(得分:1)

你可以(假设系统的架构方式使这很容易)创建自己的DB Access类版本(我假设您使用的是teh语句/ preparedstatement接口),这将保留真正的数据库调用,并且您可以修改以完全按照您的要求进行操作。

我做到了这一点 - 需要一天时间才能完成无聊的工作。

答案 2 :(得分:1)

我不认为有类似的东西 您最好设置自己的数据库并在机器/ LAN上进行测试。

我所知道的就是:

两者都支持MySQL,但没有支持MS-SQL。我认为这与许可问题和限制有关。所以我担心你不会为MS-SQL db找到类似的服务。

答案 3 :(得分:0)

用我想到的选项回答自己,我很高兴听到你的意见。 爬行后,我到了HyperSQLDB,这是一个java实现的数据库。 您认为采用HSQLDB的源代码并向其添加另一层是否可行,因此我可以控制它并为其注入预定义的行为。 例如,我会让它慢慢运行所有查询,我会让它断开连接等等。

你认为这个想法值得追求吗?它是否可以在合理的时间内完成?

答案 4 :(得分:0)

如果您使用的不是MS-SQL,则可能会因为不兼容性和缺乏功能(例如,交易)而导致更多测试问题。所以我和卡尔一起 - 使用垫片。

如果您正在寻找普通行为的单元测试覆盖率,我可能会有不同的想法。

我没有亲自使用它们,但是你所谈论的内容听起来非常适合模拟框架,例如Mockitodocs)或PowerMock。它们似乎为您所追求的故障注入提供了良好的支持。有经验的人(或类似人)可以称重吗?另请参阅How to stub/mock JDBC ResultSet to work both with Java 5 and 6?

答案 5 :(得分:0)

执行过程sp_who2它将在您的数据库中生成所有当前连接和进程,您可以看到对应于每个数据库连接的名为spid的列。只需键入:kill <<spid>>并执行它以终止任何用户..等等。但如果spid小于50,则意味着它是一个系统进程并且不会杀死它。这可以帮助您复制连接丢弃。 你也可以说ALTER DATABASE dbname SET SINGLE_USER WITH ROLLBACK_IMMEDIATE这将立即丢弃与所述数据库的所有连接。

Select @@MAX_Connections as Max_Connections将为您提供可以对数据库进行的最大连接(您可以将其设置为较小的数字以测试连接不可用性)。

复制查询超时..将查询超时设置为一个非常低的数字&amp;执行一个相当大的查询。

创建磁盘空间错误,只需重新编写db文件的大小&amp;不允许它增长...然后将数据插入数据库(你会得到一个例外)。

altert database xxx (file= maxsize= filegrowth=)