【发布时间】:2016-05-17 17:44:01
【问题描述】:
考虑以下“生产”代码:
public class Foo<T extends Number> {
private Bar delegate;
private Class<T> numberClass;
public Foo(Class<T> numberClass) {
this.numberClass = numberClass;
}
public T doSomething() {
if (numberClass==Integer.class) {
return delegate.getIntValue();
} else if (numberClass==Float.class) {
return delegate.getFloatValue();
} else if (numberClass==Double.class) {
return delegate.getDoubleValue();
} // etc etc etc
return null;
}
}
这是基于我所面临的真实情况...我无法控制委托对象的实现。
那么,如何使用 JMockit @Tested 注释对此类进行单元测试?我不能使用@Injectable 注入Class 值...它抱怨Class 不可模拟。而且我不是要嘲笑它,只是注入它。与字符串、原语或枚举不同,我可以说 @Injectable("foobar") String s; 并获得一个非模拟的可注入对象,这些语义不适用于 Class 对象。
显然,我的解决方法是在 @Before 方法中手动构建我的 Foo,所以我会这样做。但我不禁觉得 JMockit 应该可以解决这种情况。
【问题讨论】: