每次从jMockit期望返回不同的值

时间:2012-10-22 18:49:54

标签: junit mocking jmockit

我有一个单元测试,我在嘲笑java.net.URI课程。此外,我正在创建一个jMockit NonStrictExpectation,我希望调用URI.getPath()并返回一个特定的字符串。

正在测试的代码调用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

1 个答案:

答案 0 :(得分:20)

好像你只需要列出uri.getPath()一次,然后使用returns的varargs版本......就像这样:

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

这是根据documentation,无论如何......我自己没有测试过。

  

在为给定期望记录多个连续返回值的情况下,可以对return(Object,Object ...)方法进行单次调用。