我有一个想要测试的类,它看起来像这样:Package com.
import org.springframework.beans.factory.annotation.Autowired;
public class ClassToTest implements InterfaceToTest{
@Autowired
AnotherService serviceA;
@Override
public List<String> methodToTest(List<String> randomVar){
...
String stringA = serviceA.someFunction(randomVar);
...
}
}
在使用Spock进行测试时,如何模拟调用serviceA.ome Function(随机变量)的结果以返回我选择的任何字符串?
package com.something;
import spock.lang.Shared
import spock.lang.Specification
class TestClass extends Specification{
@Shared InterfaceToTest classToTest = new ClassToTest()
static doWithSpring = {
serviceA(AnotherService)
}
def "tests-part-1"(){
when: "something"
...
then: "expect this"
...
}
}
我不知道从这里到哪里去。我的IDE显示了我添加到测试类中的doWithSpring代码的错误。对如何处理这件事有什么想法吗?
4条答案
按热度按时间pwuypxnk1#
我建议更多地从单元测试的Angular 来考虑它。您想要模拟出Spring框架的东西,并确保您正在测试您的逻辑。使用Spock很容易做到这一点。
从这里,您可以查看驱动它的数据,或者使用>并传递您想要返回的不同字符串的列表。
r6l8ljro2#
启用单元测试的一个简单解决方案是将ClassToTest更改为具有一个构造函数,该构造函数如下所示设置了ServiceA字段:
然后,在您的Spock单元测试中,您可以在构造函数中提供模拟:
在每个测试用例中,您都可以用通常的Spock方式进行模拟:
lmvvr0a83#
如果你正在进行单元测试,那么就按照@rockympls的建议去做。
如果您正在进行集成/组件测试,那么请包括
spock-spring
依赖项,并查看SpockMaven提供的test examples。此外,如果您使用的是Spring Boot 1.4+,则可以执行以下操作:有关Spring Boot测试内容的更多信息,请参阅this。
xlpyo6sf4#
我也遇到了同样的问题,我是这样解决的: