Too few invocations for:
1 * dao.getAddressFromSomewhere("me") (0 invocations)
Unmatched invocations (ordered by similarity):
None
下面是源代码和测试代码,有人能让我知道我做错了什么吗?似乎根本没有调用dao mock并返回“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:块中声明的交互在任何其他交互之前进行匹配。这允许用then:块中声明的交互重写setup方法中声明的交互。
您可以通过以下几种方式重写示例:
给定:
块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"
}
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"
}
编辑: 链接到repo示例:https://gitlab.com/bartekwichowski/spock-too-many
我是Spock测试框架的新手,我试图为我正在工作的一个android项目做一些测试。我目前测试的这些对象是PJO,所以可以用常规的Spock测试它们。出于某种原因,我一直在我的一个对象上调用isAlive方法,但我知道它被调用了,感觉我已经在调试器中运行了它,它被调用了。所以我希望有人能引导我知道我做错了什么。 下面是我的测试代码: 任何帮助都将不胜感激。我已经在我能想到的每种配置中尝试过了...
注意:如果我不使用JMockit,我可以进行调试,但是在生产代码中测试方法需要使用这个方法。 关于如何让调试器从使用JMockit的Spock测试中停在Java代码中,有什么想法吗?
我以为我已经理解了斯波克的交互,但我必须管理,我仍然错过了一些部分的图片。 好了,这里是我的问题:我在Grails服务中有一个方法,它执行一些操作,包括调用同一个服务类的void方法。代码如下: 你觉得呢?怎么了? 一如既往,提前感谢。
我编写了一个Groovy扩展库,它为List类添加了额外的方法。我试图用Spock编写测试,但我无法让我的一些测试工作。 代码 有人能解释一下为什么Spock认为没有被调用吗?还是我错过了什么? 谢了。