gpt4 book ai didi

spring-boot - 斯波克测试 : Too few invocation

转载 作者:行者123 更新时间:2023-12-05 08:53:09 30 4
gpt4 key购买 nike

我正在为一个服务类编写 Spock 测试,该服务类的方法在 spring boot 应用程序中调用 Dao 类中的另一个方法。但是,我得到:

 Too few invocations for:
1 * dao.getAddressFromSomewhere("me") (0 invocations)
Unmatched invocations (ordered by similarity):
None

下面是源代码和测试代码,有人可以告诉我我做错了什么吗?似乎 dao 模拟根本没有被调用并返回“USA”。我在网上做了一些研究,找不到我做错了什么。

@Service
public class ServiceClass
{
@Autowired
private DaoClass dao;

public String getAddress(String name) {
return dao.getAddressFromSomewhere(name);
}
}

@Component
public class DaoClass {
public String getAddressFromSomewhere(String name) {
// get address from DB
......
}
}

这是我的 Spock 测试代码:

@ContextConfiguration
@Import(ServiceClass.class)
public class Test extends Specification {

@Autowired
private DaoClass dao;
@Autowired
private ServiceClass service;

@TestConfiguration
static class MockConfig {
def detachedMockFactory = new DetachedMockFactory()
@Bean
DaoClass dao() {
return detachedMockFactory.Mock(DaoClass)
}
}

def "Test Success Senario"() {
given: "dao"
dao.getAddressFromSomewhere("me") >> "USA";

when: "call service "
def actualResponse = service.getAddress("me");

then: "dao should be invoked with given response"
1 * dao.getAddressFromSomewhere("me")
actualResponse == "USA"
}
}

最佳答案

通过在 then: 中编写 1 * dao.getAddressFromSomewhere("me") block ,您只需覆盖交互 dao.getAddressFromSomewhere("me") >> "USA" 在你的 given: block 中。通过不通过 >>> 声明返回值,您只需告诉 mock 返回 null。您可以使用 Spock doc 检查交互顺序:

...Interactions declared in a then: block are matched against before any other interactions. This allows to override interactions declared in, say, a setup method with interactions declared in a then: block.

您可以通过多种方式重写您的示例:

  1. given: block 中声明您的交互
def "Test Success Senario"() {
given: "dao"
1 * dao.getAddressFromSomewhere("me") >> "USA"

when: "call service "
def actualResponse = service.getAddress("me")

then: "dao should be invoked with given response"
actualResponse == "USA"
}
  1. then: block 中声明您的交互:
def "Test Success Senario"() {
when: "call service "
def actualResponse = service.getAddress("me")

then: "dao should be invoked with given response"
1 * dao.getAddressFromSomewhere("me") >> "USA"
actualResponse == "USA"
}

关于spring-boot - 斯波克测试 : Too few invocation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54489759/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com