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

Junit 每次从jMockit期望返回不同的值,junit,mocking,jmockit,Junit,Mocking,Jmockit,我有一个单元测试,在这里我模拟java.net.URIclass。此外,我正在创建一个jMockitNonStrictExpectation,其中我希望调用URI.getPath(),并返回一个特定的字符串 正在测试的代码调用了两次URI.getPath(),每次都需要发送不同的字符串 以下是我正在测试的实际方法: public void validateResource() { // some code URI uri = new URI(link1.getHref());

我有一个单元测试,在这里我模拟
java.net.URI
class。此外,我正在创建一个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();
}
现在,当第二次调用
URI.getPath()
时,我希望从预期中返回
“/resource/2”
。但它总是达到第一个期望值并返回
“/resourcegroup/1”
。这是我的问题


我该怎么做?由于许多原因,我不能真正使用
strictExpections
,并且必须坚持使用
nonstrictExpections

似乎您只需要列出
uri.getPath()
一次,然后使用
返回值的varargs版本
…类似这样的内容:

uri.getPath(); returns("/resourceGroup/1", "/resourceGroup/2");
这是根据,无论如何…我自己没有测试过

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