我有一个要模拟的简单类 Foo
:
public class Foo {
private String name;
public Foo() {
}
public Foo(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
在我的单元测试代码中,我使用 Mockito 模拟它.
Foo mockedFoo = Mockito.mock(Foo.class);
mockedFoo.setName("test");
// name is null
String name = mockedFoo.getName();
我在模拟对象中设置了 name
,但是当我调用 getter 获取名称时,它返回 null。
这是 Mockito 特定问题还是模拟对象无法设置值的约定?这是为什么?模拟对象下面发生了什么?
最佳答案
是的 - Foo
的实际代码并不重要,因为你在 mock 它......而且 Mockito 不知道这意味着setName
和getName
之间的关系。它不假定它应该将参数存储到 setName
并在调用 getName
时返回它……它可以那样做,但是据我所知,它并没有。 Mockito 提供的 mock 只允许您指定在其上调用方法时发生的情况,并检查稍后调用的。您可以模拟对 getName()
的调用并指定它应返回的内容,而不是调用 setName
...
... 或者您可以直接使用 Foo
而不是模拟它。不要认为您必须在测试中模拟一切。只是模拟(或伪造)当你使用真实类时尴尬的东西,例如因为它使用文件系统或网络。
关于java - 将值设置为模拟对象但得到 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34205105/