java - 是否需要为 Mockito.mock() 创建一个接口(interface)或实现类?

标签 java unit-testing mockito

我阅读了教程,但不明白 - 应该实现多少模拟对象。我们是否将一个接口(interface)或整个实现的类传递给mock()?

如果没有实现怎么办?您是否需要创建一个接口(interface) - 假设您由于不了解实际实现而省略了一些方法...

来自mockito.org 的示例 here

//mock creation
 List mockedList = mock(List.class);

我需要使用 android List 类的方法创建一个“List”类吗?

最佳答案

Mockito 每个方法的默认实现由 RETURNS_DEFAULTS 给出,(除非另有配置)遵循 ReturnsEmptyValues :

Default answer of every Mockito mock.

  • Returns appropriate primitive for primitive-returning methods
  • Returns consistent values for primitive wrapper classes (e.g. int-returning method returns 0 and Integer-returning method returns 0, too)
  • Returns empty collection for collection-returning methods (works for most commonly used collection types)
  • Returns description of mock for toString() method
  • Returns zero if references are equals otherwise non-zero for Comparable#compareTo(T other) method (see issue 184)
  • Returns an java.util.Optional#empty() empty Optional for Optional (see issue 191).
  • Returns null for everything else

对于传递给 Mockito.mock() 的类上任何可模拟但未 stub 的方法,模拟方法默认情况下都会具有此行为,无论您是否传入具体的类或接口(interface)。事实上,Mockito 鼓励您仅 stub 对被测系统有值(value)的方法,并让默认值适用于其他所有内容。如果您“忘记” stub 方法,或者在编写测试后添加新方法,也会出现这种情况。

请注意,对于 Mockito.spy,默认行为是委托(delegate)给您传递给 spy 的实例(副本),并且通过将其他参数传递给Mockito.mock 如果您愿意,您可以更改此“默认答案”。

关于java - 是否需要为 Mockito.mock() 创建一个接口(interface)或实现类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37818904/

相关文章:

java - 从子文件夹外部导入java中用户定义的包

java - Android扩展ListView

java - Netty 线程模型在客户端连接多的情况下如何工作?

angular - 如何在单元测试 Angular 5 中使用和处理来自服务的订阅响应以实现代码覆盖率?

java - Mockito - 当主类包含许多其他类时模拟的深度?

java - android项目有红色x但代码没有错误

c# - 我可以将资源 (resx) 文件用作 "Embedded Resource"*以及* "Content"吗?

java - 模拟某些调用,但不要在同一个 spring 服务方法中模拟某些调用

java - Mockito 抛出异常

java - JUnit4 中静态内部测试类的嵌套测试设置