Spock 模拟不会 return 正确的值
Spock mock won't return correct value
我已经为此奋斗了好几天。这个 mock 不会 return SUCCESS
(true): 1 * realtimeClient.send(_) >> SUCCESS
。
从 我发现我需要 1 *
,但我添加了它但没有成功。我正在打印 realtimeClient.send()
结果的中间变量,它始终为 false。
RealtimeClient
和 QueueClient
是接口。我尝试使用具体的 classes 对 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(_)
}
控制器 class 精简为一个基本示例,看起来像
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(_)
的预期
请参阅文档中的 Combining Mocking and Stubbing,如果您模拟某些内容并需要 return 一个值,则必须同时进行。因此,如果您将 given
块中的行 1 * realtimeClient.send(_) >> SUCCESS
合并到 then
块中,那么它 return 就是您期望的值。
def "test real time email success"() {
given:
RealtimeClient realtimeClient = Mock()
QueueClient queueClient = Mock()
RestfulEmailController restfulEmail = new RestfulEmailController(realtimeClient: realtimeClient, queueClient: queueClient)
RestfulEmailContract email = new RestfulEmail(subject: "some subject")
when:
restfulEmail.sendRestfulEmail(email)
then:
1 * realtimeClient.send(_) >> SUCCESS
0 * queueClient.send(_)
}
我已经为此奋斗了好几天。这个 mock 不会 return SUCCESS
(true): 1 * realtimeClient.send(_) >> SUCCESS
。
从 1 *
,但我添加了它但没有成功。我正在打印 realtimeClient.send()
结果的中间变量,它始终为 false。
RealtimeClient
和 QueueClient
是接口。我尝试使用具体的 classes 对 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(_)
}
控制器 class 精简为一个基本示例,看起来像
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(_)
请参阅文档中的 Combining Mocking and Stubbing,如果您模拟某些内容并需要 return 一个值,则必须同时进行。因此,如果您将 given
块中的行 1 * realtimeClient.send(_) >> SUCCESS
合并到 then
块中,那么它 return 就是您期望的值。
def "test real time email success"() {
given:
RealtimeClient realtimeClient = Mock()
QueueClient queueClient = Mock()
RestfulEmailController restfulEmail = new RestfulEmailController(realtimeClient: realtimeClient, queueClient: queueClient)
RestfulEmailContract email = new RestfulEmail(subject: "some subject")
when:
restfulEmail.sendRestfulEmail(email)
then:
1 * realtimeClient.send(_) >> SUCCESS
0 * queueClient.send(_)
}