对于单元测试,我需要模拟几个依赖项。依赖项之一是实现接口的类:

public class DataAccessImpl implements DataAccess {

...

}

我需要设置一个这个类的模拟对象,当提供一些指定的参数时,它返回一些指定的值。

现在,我不确定的是,是否更好地模拟接口或类,也就是说。

DataAccess client = mock(DataAccess.class);

VS

DataAccess client = mock(DataAccessImpl.class);

在测试方面有什么不同吗?首选的方法是什么?

下面是一些关于模拟课的其他想法。读得不错,imho:stackoverflow.com/questions/1595166/…

在您的情况下,这可能不会有太大的区别,但是首选的方法是模拟接口,正如通常情况下,如果您遵循TDD(测试驱动开发),那么即使在编写实现类之前也可以编写单元测试。因此,即使没有具体的类DataAccessImpl,仍然可以使用接口DataAccess编写单元测试。

此外,模拟框架在模拟类方面有局限性,一些框架在默认情况下只模拟接口。

在大多数情况下,技术上没有区别,您可以模拟为类,因此是一个接口。从概念上讲,由于更好的抽象,使用接口更好。

这要看情况而定。如果代码依赖于类而不是接口,则必须模拟类来编写有效的单元测试。

或者听测试,让代码依赖于一个接口,这很可能是应该的。

这是错误的。如果你看到不同,请解释一下。TDD甚至要求对接口进行测试,而不是对实现的类进行测试。如果您的代码依赖于一个类而不是给定的接口,那么您还有另一个更大的问题。

您应该模拟该接口,因为它将有助于确保您遵守Liskov替换原则(https://stackoverflow.com/a/56904/3571100)。

很有趣的是,您如何通过模拟接口来实现这一点?我可以模拟接口,但在类实现中,我可以违反Liskov替换。

@karlihnos我提供的链接声明"函数[…]必须能够在不知道的情况下使用派生类的对象。"换句话说,我们应该编程到接口,而不是实现。所以在测试的类中,我们可以通过编程到接口来帮助实现LSP。当然,这样做并不能说明任何模拟接口实现是否会遵循LSP。

如果你只通过界面来使用它,而且它不是一个局部的模仿,除了你的内在感觉之外,没有什么不同。嘲笑类也会模拟非使用的公共方法,如果类有他们,但这不是一个大问题要考虑。

java模拟使用接口,关于java:模拟一个类与模拟它的接口相关推荐

  1. java接口中只能定义常量和抽象方法_java基础19. 下列有关接口的叙述错误的是哪项?() A.接口中只能包含抽象方法和常量 B.一个类可以实现多个接口...

    共回答了21个问题采纳率:81% 选择错误的. A 接口中只能包含抽象方法和常量 这个是正确的 下面给你说一下抽象类和接口的区别:抽象类由abstract关键字来修饰,接口由interface关键字来 ...

  2. java一个类添加多个接口_Java的一个类可以实现多个接口。

    Java的一个类可以实现多个接口. 答:√ 下列原始凭证中属于一次凭证的有( ). 答: 收据 收料单 完全角化细胞在显微镜下不可能出现的颜色是 答:白色 In a language classroo ...

  3. ASM 判定一个类,实现了指定接口

    为什么80%的码农都做不了架构师?>>>    ASM 判定一个类,实现了指定接口 技术支持 ASM 中,ClassReader 类:对已存在的进行解析,并提供获取类信息的方法. 通 ...

  4. 任务2、创建笔记本电脑类(继承一个类,实现多个接口)

    文章目录 任务2.创建笔记本电脑类(继承一个类,实现多个接口) (二)编程实现 1.创建NetCard接口 2.创建USB接口 3.创建Computer抽象类 4.创建笔记本电脑类 - Laptop ...

  5. 【Python养成】:案例(设计三维向量类、实现向量的加法、减法以及向量与标量的乘法和除法运算、编写自定义类,模拟内置集、编写自定义类,模拟双端队列。)

    学习内容:设计三维向量类.实现向量的加法.减法以及向量与标量的乘法和除法运算 设计三维向量类.实现向量的加法.减法以及向量与标量的乘法和除法运算 实验代码: class Vector_3D:def _ ...

  6. 一个类可以实现多个接口但是只能实现一个类

    public class SpbmServiceImpl extends BasicServiceImpl implements ISpbmService,ISpbmDao {} 一个类可以实现多个接 ...

  7. 【Java小项目实训】编写一个窗体程序模拟单词拼写

    实训要求 窗口中有一个TextFie1d对象和一个按钮对象,将这两个对象添加到一个面板中,然后将该面板添加到窗口的北面.用户在TextField 对象中输入一个英文单词,然后回车或单击按钮,程序将创建 ...

  8. public接口可以被任何一个类实现_一文带你深入Java核心技术:对象克隆+接口与回调,还有这种操作...

    对象克隆 当拷贝一个变量时,原始变量与拷贝变量引用同一个对象,如图6-1所示.这就是说,改变一个变量所引用的对象将会对另一个变量产生影响. Employee original = new Employ ...

  9. Java两同_java:一个类实现的两个接口里都有同一个方法(名),怎么处理?

    不一定,关键要看子类是否是抽象类. 如果子类是非抽象类,则必须实现接口中的所有方法: 如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在! 1.抽象类定义 抽象类往往用来 ...

最新文章

  1. tcp/ip 协议栈Linux内核源码分析12 udp套接字发送流程一
  2. php加密解密p源码可以吗,论 如何做好PHP的加密解密呐,源码教学
  3. 第五章· MySQL数据类型
  4. 信安教程第二版-第26章大数据安全需求分析与安全保护工程
  5. Bootstrap3 工具提示插件的方法
  6. Java课程烧CPU吗_java程序员:完了!CPU一味求快出事儿了!
  7. normalize.css 中文版
  8. vant ui的dialog二次封装使用
  9. c#:使用bing翻译API
  10. 爬取大众点评数据经验
  11. matlab 循环和判断语句,matlab中循环语句与for循环
  12. 手把手教你做一个APP应用(含源码)
  13. 百度未授权使用地图API,可能是因为您提供的密钥不是有效的百度LBS开放平台密钥.
  14. Trianglify - 生成五彩缤纷的 SVG 背景图案
  15. 数据挖掘系列篇(10):大众点评的实时计算
  16. Frequent Subsets Problem
  17. Python集合运算
  18. 他是“创业教父”,做出4家上市公司,秘诀6个字:找俗人,打呆仗!
  19. python文件打包
  20. 计算机打印中没有记录纸,打印机出来白纸没有字

热门文章

  1. 基于自动驾驶车辆的NVIDIA-TensorRT推理实时优化
  2. 利用UltraScale和UltraScale+FPGA和MPSOC加速DSP设计生产力
  3. YOLOV4知识点分析(一)
  4. [C] Bellman-Ford边松弛:解决负权边
  5. n个素数构成等差数列
  6. RxJava 实现模糊搜索
  7. Java 的 API、JDK 和 IDE 是什么
  8. Fragment有直接关系的关键性类FragmentManager,FragmentTransaction,FragmentActivity
  9. LayoutParams cannot be resolved to a type
  10. haystack全文检索框架