【发布时间】:2011-12-28 19:34:11
【问题描述】:
我正在尝试使用 scalatest 和 mockito 模拟 RabbitMQ ConnectionFactory 对象以返回模拟连接。以下是我正在使用的示例测试:
class RabbitMQMockTest extends FunSuite with MockitoSugar {
test("RabbitMQ ConnectionFactory is correctly mocked") {
def connectionFactory = mock[ConnectionFactory]
def connection = mock[Connection]
when(connectionFactory.newConnection()).thenReturn(connection)
println(connectionFactory.newConnection())
assert(connectionFactory.newConnection() != null)
}
}
这总是失败,并且 println 语句总是打印“null”。我对一起使用这些技术非常陌生,想知道是否有人有任何建议或可以让我知道我是否做错了什么。提前致谢!
【问题讨论】:
-
你能打破你的测试只依赖模拟
Connection吗?以这种方式模拟多个级别的依赖项通常是令人讨厌的——您最终会维护大量脆弱的模拟代码,这些代码本身不会为您的项目增加价值。 -
是的,我同意有一个返回模拟的模拟通常是一种测试气味。对于连接东西附近的东西,我会改为编写集成测试而不是单元测试。关于您的问题,您是否对其他类(如您的类)有同样的不稳定行为。
-
大家好,感谢您的回复!我绝对同意你们俩的观点,这远非理想,我计划重构被测类以允许更好的依赖注入。然而,我确实解决了我的问题,结果证明我犯了一个彻头彻尾的错误。我使用“def”而不是“val”或“var”定义了模拟类,所以每次调用其中一个方法时,我都会创建一个新的模拟。很抱歉浪费大家的时间,再次感谢cmets!
标签: scala rabbitmq mockito scalatest