Spock方法嘲弄

时间:2017-09-14 13:08:19

标签: java unit-testing spock

我有一个方法负责将一个标志更改为禁用传递的对象。目的是测试该方法是否改变了该标志。我正在使用spock框架。方法在接口上调用,由JPA模块实现。我找不到任何方法来模拟这个方法

Interface MyService {
    public void update();
}

interface MyRepositoryService {
    //implemented by JPA module
    public void update(MyObject myObject);
}

class MyObject {
    //..
    private boolean disable;
    //..
}

规范下的模块:

class MyServiceImplementation implements MyService {
   private MyRepositoryService myRepositoryService;

   //method to be mocked
   void update(MyObject myObject){
      //...
      myRepository.update(myObject)
      //...
   }
}

1 个答案:

答案 0 :(得分:0)

不确定我是否会失去什么,但只是宣布一个模拟 - 如果您要测试对象之间的互动 - 或者存根如果您要测试方法行为。

实例测试对象调用构造函数手动传递模拟对象并编写测试代码。

使用Groovy语法快速举例:

class MyServiceImplementationUnitTest extends Specification {

  def Repository repository = Mock(Repository)

  @Subject MyService service = new MyService(
      ...
      repository // the mock      
  )

  // an example guidelines for a possible test
  def "this is a test"() {
    given: "an input object"
      def inputObject = SMTH
    when: "we call update method with that object"
      service.update(inputObject)
    then: "repository's update method is called once with expected parameter"
      1 * repository.update(inputObject)
  }
}