2017-09-14 95 views
0

我已经有方法负责将标志更改为禁用通过的对象。目的是测试该方法是否改变了该标志。我正在使用spock框架。方法被调用的接口,并通过JPA module.I实施找不到任何方式嘲笑这种方法Spock方法嘲讽

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) 
     //... 
    } 
} 

回答

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) 
    } 
} 
+0

我需要不检查方法被调用,但传递到更新方法的对象所做的更改。据我所知,我需要嘲笑这种方法。 – Luca

+0

@Luca对不起,但......没有。您发布的代码的单元测试是上面的代码。当你调用该方法时,你的类有一个方法,委托给一个内部对象,用一个给定的参数调用一个方法。你可能正在寻找类Repository的单元测试(委托),但是从外部我不知道'repository.update(obj)'对obj做了什么。如果这种行为发生变化,MyService的代码仍然可以。:) 检查obj是否发生了变化将使其成为“2-clases-integration-test” – Manu

+0

你是对的,我想实现的是归结为集成测试 – Luca