java - 将值设置为模拟对象但得到 null

标签 java unit-testing mocking mockito

我有一个要模拟的简单类 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 不知道这意味着setNamegetName 之间的关系。它不假定它应该将参数存储到 setName 并在调用 getName 时返回它……它可以那样做,但是据我所知,它并没有。 Mockito 提供的 mock 只允许您指定在其上调用方法时发生的情况,并检查稍后调用的。您可以模拟对 getName() 的调用并指定它应返回的内容,而不是调用 setName...

... 或者您可以直接使用 Foo 而不是模拟它。不要认为您必须在测试中模拟一切。只是模拟(或伪造)当你使用真实类时尴尬的东西,例如因为它使用文件系统或网络。

关于java - 将值设置为模拟对象但得到 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34205105/

相关文章:

c# - 模拟兄弟方法

java - 替换非静态方法java模拟

java - 具有用户定义大小的数组,填充随机数

java - 使用 AES 加密来加密文件

python - 使用用户对象在 Django 中测试表单

c# - 如何对依赖于工厂的代码进行单元测试

java - 三元运算符 & 是什么意思

java - 为什么这个 Java Switch-Case 不起作用?

java - 是否建议为程序中的每个类编写一个测试用例?

java - 如何解决以下 stub 是不必要的 - Mockito - Android