18

我有一个单元测试,我正在模拟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.

4

1 回答 1

30

似乎您只需要列出uri.getPath()一次,并使用returns...类似这样的可变参数版本:

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

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

通过调用returns(v1, v2, ...) 方法,可以为期望记录要返回的多个连续值。或者,可以通过为结果字段分配包含连续值的列表或数组来实现相同的目的。

于 2012-10-23T04:46:02.017 回答