考虑以下代码:
final Foo foo = context.mock(Foo.class);
context.checking(new Expectations() {{
one(foo).someMethod(with(aNonNull(List.class)));
}});
我试图建议 someMethod
使用 List<Bar>
类型的非空参数调用。但是,我无法找出指定列表包含 Bar 类型对象的正确语法。以下简单的尝试不是有效的代码:
final Foo foo = context.mock(Foo.class);
context.checking(new Expectations() {{
one(foo).someMethod(with(aNonNull(List<Bar>.class)));
}});
有正确的方法可以做到这一点还是我被迫添加 @SuppressWarnings("unchecked")
我的测试方法?
我知道这并不是严格意义上的 JMock 特定问题,但我想我应该这样标记它以吸引那些过去可能遇到过此问题的人。
最佳答案
泛型信息在运行时被删除 [JB]Effective Java SE p.l14。 所以你必须以其他方式检查这一点。
我发现这个方法可以检查列表中所有元素的类型:
final Foo foo = context.mock(Foo.class);
context.checking(new Expectations() {{
oneOf(foo).someMethod((List<Object>) with(Every.everyItem(IsInstanceOf.instanceOf(Bar.class))));
}});
关于java - 在参数匹配器中指定泛型类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9263483/