【发布时间】:2014-08-13 02:57:12
【问题描述】:
我正在尝试使用 Mockito 1.9.5 模拟一个类,但我在让它工作时遇到了很多麻烦。
public class Property<T> {
private T value;
public T get() { return this.value; }
public void set(T value) { this.value = value; }
}
public class Model {
private final Property<Integer> count = new Property<Integer>();
public Property<Integer> count() { return this.count; }
}
public class View {
public View(Model model) {
Integer count = model.count().get();
}
}
我写了我的测试样板:
Model model = mock(Model.class, Mockito.RETURNS_MOCKS);
View view = new View(model);
...得到了一个很长的ClassCastException:
线程“main”中的异常 java.lang.ClassCastException: org.mockito.internal.creation.jmock.ClassImposterizer$ClassWithSuperclassToWorkAroundCglibBug$$Enhancer
ByMockitoWithCGLIB$$cb6ca60b 不能转换为 java.lang.Integer
我知道 Mockito 不能模拟 final 类或原语,但我不知道我需要做些什么才能完成这项工作。
【问题讨论】:
-
我猜它不起作用,因为
model.count().get()返回Object,而不是Integer。您可能需要模拟count并将其注入Model。 -
@AndrewLogvinov 问题是我的
Model类中有很多属性,为所有这些类编写模拟非常耗时。我认为模拟框架的目的是让我免于手动编写大量样板......
标签: java unit-testing generics mockito