【发布时间】:2020-08-10 20:59:13
【问题描述】:
我已经为此奋斗了好几天。此模拟不会返回 SUCCESS (true): 1 * realtimeClient.send(_) >> SUCCESS。
从question 41841668 我发现我需要1 *,但我没有成功添加。我正在打印出realtimeClient.send() 结果的中间变量,它总是错误的。
RealtimeClient 和 QueueClient 是接口。我尝试使用具体类对RestfulEmailController 和 Spock 测试进行编码,但行为没有变化。我试过大的Boolean 而不是小的boolean,没有变化。文档说这应该可行,问题 41841668 说这应该可行(尽管示例代码不太完整)。
public static final boolean SUCCESS = true
def "test real time email success"() {
given:
RealtimeClient realtimeClient = Mock()
QueueClient queueClient = Mock()
1 * realtimeClient.send(_) >> SUCCESS
RestfulEmailController restfulEmail = new RestfulEmailController(realtimeClient: realtimeClient, queueClient: queueClient)
RestfulEmailContract email = new RestfulEmail(subject: "some subject")
when:
restfulEmail.sendRestfulEmail(email)
then:
1 * realtimeClient.send(_)
0 * queueClient.send(_)
}
控制器类被剥离成一个基本的例子看起来像
void sendRestfulEmail(@RequestBody RestfulEmail emailRequest) {
boolean success = realtimeClient.send(emailRequest)
System.out.println("success = " + success )
if (!success ) {
queueClient.send(emailRequest)
}
}
我做的任何事情都无法让系统打印“success = true”,而我对0 * queueCient.send(_)的期望失败了
【问题讨论】:
标签: spock