我有一个单元测试,我在嘲笑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
。
答案 0 :(得分:20)
好像你只需要列出uri.getPath()
一次,然后使用returns
的varargs版本......就像这样:
uri.getPath(); returns("/resourceGroup/1", "/resourceGroup/2");
这是根据documentation,无论如何......我自己没有测试过。
在为给定期望记录多个连续返回值的情况下,可以对return(Object,Object ...)方法进行单次调用。