2017-09-14 103 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