Set value to mocked object but get null(将值设置为模拟对象但获取 null)
问题描述
我有一个要模拟的简单类 Foo
:
I have a simple class Foo
to be mocked:
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 来模拟它.
In my unit test code, I mock it by using Mockito.
Foo mockedFoo = Mockito.mock(Foo.class);
mockedFoo.setName("test");
// name is null
String name = mockedFoo.getName();
我在模拟对象中设置了 name
,但是当我调用 getter 获取名称时,它返回 null.
I set name
in mocked object, but when I call getter to get the name it returns null.
这是 Mockito 特有的问题,还是模拟对象无法设置值的约定?这是为什么?模拟对象下面发生了什么?
Is it a Mockito specific issue or is it an convention that mocked object can't set value? Why is that? What is happening underneath with mocked object?
推荐答案
嗯,是的 - Foo
的 实际 代码无关紧要,因为你在嘲笑它...而 Mockito 不知道 setName
和 getName
之间存在关系.它不假定它应该将参数存储到 setName
并在调用 getName
时返回它......它 可以 这样做,但是据我所知,它没有.Mockito 提供的 mock 只允许您指定在其上调用方法时会发生什么,并检查以后调用了什么 .您可以模拟对 getName()
的调用,而不是调用 setName
,并指定它应该返回的内容...
Well yes - the actual code of Foo
doesn't matter, because you're mocking it... and Mockito doesn't know there's meant to be a relationship between setName
and getName
. It doesn't assume that it should store the argument to setName
and return it when getName
is called... it could do that, but it doesn't as far as I'm aware. The mock provided by Mockito just allows you to specify what happens when methods are called on it, and check what was called later on. Instead of calling setName
, you could mock a call to getName()
and specify what it should return...
... 或者您可以直接使用 Foo
而不是模拟它.不要认为您必须在测试中模拟所有内容.当您使用真实课程时,只需模拟(或伪造)尴尬的事情,例如因为它使用文件系统或网络.
... or you could just use Foo
directly instead of mocking it. Don't think you have to mock everything in your tests. Just mock (or fake) things that are awkward when you're using the real class, e.g. because it uses the file system or network.
这篇关于将值设置为模拟对象但获取 null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将值设置为模拟对象但获取 null


基础教程推荐
- 大摇大摆的枚举 2022-01-01
- 验证是否调用了所有 getter 方法 2022-01-01
- 从 python 访问 JVM 2022-01-01
- Java Swing计时器未清除 2022-01-01
- 多个组件的复杂布局 2022-01-01
- 如何在 Spring @Value 注解中正确指定默认值? 2022-01-01
- 如何在 JFrame 中覆盖 windowsClosing 事件 2022-01-01
- 在 Java 中创建日期的正确方法是什么? 2022-01-01
- Java 实例变量在两个语句中声明和初始化 2022-01-01
- 不推荐使用 Api 注释的描述 2022-01-01