Spock如何模拟Autowired class'方法中的函数调用

时间:2016-08-10 15:58:26

标签: spring unit-testing groovy autowired spock

我有一个我想要测试的类看起来像这样: 包com.something;

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.someFunction(randomVar)调用的结果来返回我选择的任何String?

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代码的错误。关于如何处理这个的任何想法?

2 个答案:

答案 0 :(得分:1)

我建议从更多的单元测试角度考虑它。你想模拟弹簧框架的东西,只是确保你正在测试你的逻辑。这对Spock来说非常容易。

{{1}}

从这里,您可以查看驱动它的数据或使用&gt;&gt;&gt;并传递您想要返回的不同字符串的列表。

答案 1 :(得分:1)

如果您是单元测试,那么请执行@rockympls的建议。

如果您是集成/组件测试,那么请包含spock-spring依赖项并查看Spock人员的test examples。此外,如果您使用的是Spring Boot 1.4+,则可以执行以下操作:

@SpringBootTest(classes = Application)
@ContextConfiguration
class SomeIntegrationTest extends Specification {

    @Autowired
    SomeService someService

    def 'some test case'() {
        ...
    }
}

有关Spring Boot测试内容的更多信息,请参阅this