java - 在参数匹配器中指定泛型类类型

标签 java generics jmock

考虑以下代码:

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/

相关文章:

java - 使用 JBoss 7.1.1.Final AS 进行 XML Doctype 验证

java - 为什么无法导入属性文件

java - 如何推断泛型类型以避免未经检查的转换

java - 服务正在调用实际的类而不是模拟的类。 Junit4 和 Jmock

java - 是否有一种更简洁的方法来测试对列表中每个项目的模拟方法的调用

java - Tapestry 5.3.8 提交包含区域的表单

java - 虚拟线程是否在其被阻塞的同一承载线程中唤醒?

swift - 带有 Swift 协议(protocol)的通用类

c# - 其中 T : <interface> into where T: class gives cs0452

java - 模拟父类(super class)构造函数