我有以下代码:
public void someMethod() {
Set<Foo> fooSet = bar.getFoos();
for(Foo foo: fooSet) {
foo.doSomething();
}
}
我希望使用JMockit对此进行测试,但我不确定如何返回某种类型和大小的集合。
当我尝试将foo添加到foos集时,我的代码的以下测试会抛出hashcode的空指针异常。
@Test
public void someTestMethod()
{
new Expectations()
{
@Mocked Bar bar;
@Mocked Foo foo;
Set<Foo> foos = new HashSet<Foo>();
foos.add(foo);
bar.getFoos(); returns(foos);
foo.doSomething();
};
new SomeClass().someMethod();
}
应该怎么做?
答案 0 :(得分:3)
我不确定如何回答你的问题,因为我不明白你要测试的是什么,但我相信你想要这样的东西:
@Test
public void someTestMethod(@Mocked(methods="getFoos")final Bar mockedBar
@Mocked(methods="doSomething")final Foo mockedFoo {
final Set<Foo> foos = new HashSet<Foo>();
foos.add(new Foo());
new Expectations() {
{
mockedBar.getFoos(); returns(foos);
mockedFoo.doSomething();
}
};
new SomeClass().someMethod();
}
使用此功能,JMockit将模拟对getFoos
的调用并返回Set foos
。如果你查看我传入的参数,我正在对Bar和Foo类进行部分模拟(我只是模拟对getFoos和doSomething方法的调用)。我还注意到你在new Expectations
区块中缺少一组括号,这肯定会给你带来一些问题。您必须记住的另一个问题是,如果您在Set foos
中放置多个对象,则使用Expectations而非NonStrictExpectations将导致错误,因为它只期望一次调用doSomething
。如果您创建一个foos
中有多个对象的测试用例,您可以使用NonStrictExpectations或使用minTimes和maxTimes来指定调用计数约束