mockito 中 when(mock.method()).thenReturn(someValue) 的想法和用途是什么
what is the idea and use of when(mock.method()).thenReturn(someValue) in mockito
在许多教程中找到了具有以下类似语句的示例
when(mock.method()).thenReturn(someValue);
谁能解释一下为什么要用这个??那是调用方法并期望在 thenReturn() 语句中给出这样的结果吗?如果我错了请纠正我。
对于模拟,您正在尝试模拟一个对象实现,when
调用可以帮助您描述return模拟对象应具有的值。因为文档是不言自明的,所以对于其余的答案,我假设您正在寻找 Mockito 应该如何工作以及 when
如何帮助您设置模拟。
让我们创建一个界面来使用:
interface Foo {
int bar();
}
大概有一些 Foo.bar
的实现者,但也许该实现很难在测试中使用:它可能使用文件存储、网络服务或某种随机值。 (或者,也许,您还没有编写真正的实现。)现在,您已经编写了一个名为 YourClass
的 class,它依赖于一个 Foo
实例,但是您不能出于上述任何原因,在您的测试中使用真实的。你是做什么的?
一种方法是在测试中编写一个非常小的实现:
Foo fakeFoo = new Foo() {
@Override public int bar() { return 42; }
};
YourClass yourClass = new YourClass(fakeFoo);
现在您已经编写 fakeFoo
以获得可预测且易于理解的 return 值。这适用于这么小的东西,但不能扩展:如果 Foo 有十几种方法怎么办?如果您希望每次 return 一个不同的可预测值而不是每次 returning 42 怎么办?如果您想稍后检查 bar
是否被调用怎么办? Mockito 通过切换语法来帮助您完成所有这些工作:
Foo mockFoo = Mockito.mock(Foo.class);
when(mockFoo.bar()).thenReturn(42); // <- the statement you're asking about
YourClass yourClass = new YourClass(mockFoo);
现在,使用 when
语句,您告诉 mock Foo 您已经创建了要 return 的内容,就像fake 出于同样的原因,您在上面编写的 Foo 实现。从那里,您可以编写更多的 when
语句,或者依次为 return 提供 thenReturn
个更多的值,或者使用 verify
检查是否已进行调用。最重要的是,请记住:您没有使用 when
或模拟您正在测试的 class;你在嘲笑与合作的classes 你正在测试的class。
在许多教程中找到了具有以下类似语句的示例 when(mock.method()).thenReturn(someValue);
谁能解释一下为什么要用这个??那是调用方法并期望在 thenReturn() 语句中给出这样的结果吗?如果我错了请纠正我。
对于模拟,您正在尝试模拟一个对象实现,when
调用可以帮助您描述return模拟对象应具有的值。因为文档是不言自明的,所以对于其余的答案,我假设您正在寻找 Mockito 应该如何工作以及 when
如何帮助您设置模拟。
让我们创建一个界面来使用:
interface Foo {
int bar();
}
大概有一些 Foo.bar
的实现者,但也许该实现很难在测试中使用:它可能使用文件存储、网络服务或某种随机值。 (或者,也许,您还没有编写真正的实现。)现在,您已经编写了一个名为 YourClass
的 class,它依赖于一个 Foo
实例,但是您不能出于上述任何原因,在您的测试中使用真实的。你是做什么的?
一种方法是在测试中编写一个非常小的实现:
Foo fakeFoo = new Foo() {
@Override public int bar() { return 42; }
};
YourClass yourClass = new YourClass(fakeFoo);
现在您已经编写 fakeFoo
以获得可预测且易于理解的 return 值。这适用于这么小的东西,但不能扩展:如果 Foo 有十几种方法怎么办?如果您希望每次 return 一个不同的可预测值而不是每次 returning 42 怎么办?如果您想稍后检查 bar
是否被调用怎么办? Mockito 通过切换语法来帮助您完成所有这些工作:
Foo mockFoo = Mockito.mock(Foo.class);
when(mockFoo.bar()).thenReturn(42); // <- the statement you're asking about
YourClass yourClass = new YourClass(mockFoo);
现在,使用 when
语句,您告诉 mock Foo 您已经创建了要 return 的内容,就像fake 出于同样的原因,您在上面编写的 Foo 实现。从那里,您可以编写更多的 when
语句,或者依次为 return 提供 thenReturn
个更多的值,或者使用 verify
检查是否已进行调用。最重要的是,请记住:您没有使用 when
或模拟您正在测试的 class;你在嘲笑与合作的classes 你正在测试的class。