2012-10-22 30 views
7

我有一個單元測試,我嘲笑java.net.URI類。此外,我正在創建一個jMockit NonStrictExpectation,我期待調用URI.getPath()並返回一個特定的字符串。每次從jMockit期望返回不同的值

正在測試的代碼兩次調用URI.getPath(),我需要每次發送一個不同的字符串。

這是我測試的實際方法:

public void validateResource() { 
    // some code 
    URI uri = new URI(link1.getHref()); 
    String path1 = uri.getPath(); 
    // some more code 
    uri = new URI(link2.getHref()); 
    String path2 = uri.getPath(); 
} 

下面是單元測試代碼:

@Mocked URI uri; 

@Test 
public void testValidateResource() { 
    new NonStrictExpectations() { 
     { 
      // for the first invocation 
      uri.getPath(); returns("/resourceGroup/1"); 

      // for the second invocation [was hoping this would work] 
      uri.getPath(); returns("/resource/2"); 
     } 
    }; 
    myObject.validateResource(); 
} 

現在,我想"/resource/2"URI.getPath()被稱爲第二次從我的意料返回時間。但它總是碰到第一個期望並返回"/recourceGroup/1"。這是我的問題。

我該如何做到這一點?由於多種原因,我無法真正使用StrictExpectations,並且必須堅持使用NonStrictExpectations

回答

15

好像你只需要列出uri.getPath()一次,並使用returns的可變參數版本......是這樣的:

uri.getPath(); returns("/resourceGroup/1", "/resourceGroup/2"); 

這是根據documentation,反正...我沒有測試它自己。

在爲給定期望記錄多個連續返回值的情況下,可以對返回(Object,Object ...)方法進行單個調用。

+0

工作就像一個魅力...謝謝:) –

+0

太棒了,很高興它的工作! –

+0

答案中的文檔鏈接已損壞。這是一個更新的[鏈接](http://jmockit.org/tutorial/Mocking.html#results) –