【发布时间】:2013-02-24 07:59:37
【问题描述】:
首先,我使用Scala,但任何Java 方法都可能有效。
我有一个与数据库连接的应用程序,我想在不修改数据库或数据库脱机的情况下运行我的测试和开发我的应用程序。
假设,我有一个连接到数据库的大型类(或模块),做所有你想做的事情,我如何从外部访问该类或其参数?
例如,如果我希望类正常运行,而不是 statement.executeUpdate( sql ),我想要一个 println( "Did: " + sql ),在此测试中不调用第一个方法。
显然,一种方法是简单地替换这些语句 - 或复制整个文件并替换它们。但它很容易出错,如果我把它改回来,我可能会忘记一些东西。另外,它非常多余。
如何解决这个问题? JUnit怎么办?
免责声明:请不要使用“参数化您的课程”之类的解决方案。我希望我的构造函数有很少的参数,我不想在调用它时指定所有内容。测试类在我的应用程序中是二等公民,它们对实际类/实际开发几乎没有影响。
【问题讨论】:
-
模拟框架是一个很好的解决方案。它们可以让你交换你集成的对象的模拟版本,例如你的 Statement 或 Connection 对象,并且模拟对象可以配置为期望某些方法调用,如果它们没有发生或使用不正确的参数调用则失败等。Mocking 可以让你的测试更加解耦,这对单元测试来说是一件好事!
标签: java scala testing redundancy