我有一个单位测试,我在模拟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();
}
现在,当URI.getPath()
被称为第二次时,我希望从我的期望中退还"/resource/2"
。但这总是达到第一个期望并返回"/recourceGroup/1"
。这是我的问题。
我如何实现它?由于多种原因,我无法真正使用StrictExpectations
,并且必须坚持使用NonStrictExpectations
。
似乎您只需要一次列出uri.getPath()
,然后使用returns
的varargs版本...类似的东西:
uri.getPath(); returns("/resourceGroup/1", "/resourceGroup/2");
无论如何,这是根据文档的...我没有自己测试过。
可以通过调用返回(v1,v2,...)方法来记录要返回的多个连续值。另外,可以通过包含连续值的列表或数组分配 result 字段来实现同样的方法。