假设我有实现它的接口和实现类,并且我想为此编写单元测试。我应该测试什么接口或Impl?

这是一个例子:

public interface HelloInterface {

public void sayHello();

}

public class HelloInterfaceImpl implements HelloInterface {

private PrintStream target = System.out;

@Override

public void sayHello() {

target.print("Hello World");

}

public void setTarget(PrintStream target){

this.target = target;

}

}

因此,我有实现它的HelloInterface和HelloInterfaceImpl。什么是被测单元接口或Impl?

我认为应该是HelloInterface。请考虑以下JUnit测试草图:

public class HelloInterfaceTest {

private HelloInterface hi;

@Before

public void setUp() {

hi = new HelloInterfaceImpl();

}

@Test

public void testDefaultBehaviourEndsNormally() {

hi.sayHello();

// no NullPointerException here

}

@Test

public void testCheckHelloWorld() throws Exception {

ByteArrayOutputStream out = new ByteArrayOutputStream();

PrintStream target = new PrintStream(out);

PrivilegedAccessor.setValue(hi, "target", target);

//You can use ReflectionTestUtils in place of PrivilegedAccessor

//really it is DI

//((HelloInterfaceImpl)hi).setTarget(target);

hi.sayHello();

String result = out.toString();

assertEquals("Hello World", result);

}

}

主线实际上是我注释掉的那条线。

((HelloInterfaceImpl)hi).setTarget(target);

方法setTarget()不是我的公共接口的一部分,所以我不想 意外地

调用它。如果我真的想打电话给我,我应该花点时间考虑一下。例如,它可以帮助我发现我真正想做的是依赖注入。它为我打开了整个新机遇的世界。我可以使用一些现有的依赖注入机制(例如Spring的依赖注入机制),我可以像在代码中实际进行的那样自己模拟它,或者采用完全不同的方法。仔细看看,准备PrintSream并不是那么容易,也许我应该改用模拟对象?

编辑 :我想我应该 始终

专注于界面。从我的角度来看setTarget(),它也不是impl类的“合同”的一部分,它对依赖注入很有帮助。我认为从测试的角度来看,任何Impl类的公共方法都应视为私有方法。但是,这并不意味着我忽略了实现细节。

EDIT-2 在有多个实现\多个接口的情况下,我将测试所有实现,但是当我在setUp()方法中声明变量时,肯定会使用接口。

java interface和impl,被测单元:Impl还是接口?相关推荐

  1. java.lang.ClassNotFoundException: org.apache.axiom.om.impl.llom.factory.OMLinkedListMetaFactory

    如果导入之后还出现java.lang.ClassNotFoundException: org.apache.axiom.om.impl.llom.factory.OMLinkedListMetaFac ...

  2. java.lang.ClassCastException: org.apache.axiom.om.impl.llom.factory.OMLinkedListImplFactory cannot b

    项目中axiom-api-1.2.14.jar和axiom-impl-1.2.13.jar这俩个jar发生如错误 java.lang.ClassCastException: org.apache.ax ...

  3. java interfaceof,java interface教程

    发表于 2012-10-10 09:54:47 by 月小升 java interface就是表示一个接口,接口只有方法,但是没有实际的实现.实现他的接口可以采用不同的程序. Java the int ...

  4. Java POI:如何读取Excel单元格值而不是计算公式

    我正在使用Apache POI API从Excel文件中获取值. 除了含有公式的单元格外,一切都很好.实际上,cell.getStringCellValue()返回单元格中使用的公式而不是单元格的值. ...

  5. java excel单元格背景色,『excel表格尺寸设置』Java如何设置被导出excel单元格的样式?比如背景色,大小什么的?...

    Java如何设置被导出excel单元格的样式?比如背景色,大小什么的? 使 poi ,具体实现 HSSFCellStyle style = null; // 创建表头style HSSFCellSty ...

  6. java interface和类的 extends与implement 的简单总结

    interface和类.extends与implement 接口 一个接口则可以同时extends多个接口,却不能implements任何接口 类 一个类只能extends一个父类,但可以implem ...

  7. Java中码点和代码单元

    Java中码点和代码单元 前言 码点和代码单元这两个概念还是在<Java核心技术 卷一>发现的,这也是我看过这本书里面前五章中比较有用的一个知识点(PS:毕竟Java开发都一年了,基础应用 ...

  8. RSU路测单元,你知道多少?

    一.什么是RSU路测单元? RSU路测单元是实现智慧的路.车路协同的关键设备,设置在路侧,与附近过往车辆进行双向通信.交互数据,是智能交通系统中的一种重要设备.RSU可以连接路面原有电子设备,比如信号 ...

  9. java poi对Excel表格进行单元行删除

    java poi对Excel表格进行单元行删除 前几天工作时,突然需要去使用POI 来对Excel 表格进行操作,其他的操作都都没什么问题,但是在需要删除某些单元行的时候碰到了一下小坑,记录下来,防止 ...

最新文章

  1. scipy.linalg.norm 线性代数运算 API
  2. CSS教程:div垂直居中的N种方法以及多行文本垂直居中的方法
  3. 不用oracle改用mysql_数据库从oracle移植到mysql时需要进行的修改
  4. 论如何优雅的处理回文串 - 回文自动机详解
  5. linux mysql 5.6.23_MySQL 5.6.23升级到MySQL 5.7.9
  6. Codeforces - 814B - An express train to reveries - 构造
  7. Mac上以太坊Geth环境安装
  8. ASIHttpRequest封装
  9. JUC与JVM并发编程学习笔记03
  10. vue使用echarts错误Failed to mount component: template or render function not defined.
  11. mysql 线程内存 回收_【MySQL】InnoDB后台线程与内存缓存池
  12. MyBatis(六)------MyBatis映射器(select元素、insert元素、update元素、select元素、sql元素)
  13. 计算机图形学实用教程苏小红,计算机图形学实用教程(第4版)
  14. 618|Python购书攻略
  15. 兼容android模拟器的微信apk,Android模拟器中安装apk的方法
  16. 移动硬盘 提示“介质受写保护“ 无法格式化等 解决方案
  17. STM32 hal库串口空闲中断最新用法
  18. 也谈Eclipse未自动在gen目录下生成R.java
  19. Java实现生成可跳转指定页面的二维码
  20. 工商管理管理学知识归纳

热门文章

  1. 使用组策略配置Windows防火墙设置和规则
  2. 计算机音乐谱子薛之谦,薛之谦丑八怪歌词是什么意思 计算器谱子
  3. 大话西游手游服务器维护要多久,[手游]大话西游手游最新维护内容一览
  4. java创建数组的两种方法
  5. Mysql截取字符串
  6. python openpyxl #Value!
  7. 谈谈我心目中Python的形象,全能战士,红白皇后,我的倾情恋人
  8. 【3D图像分类】基于Pytorch的3D立体图像分类2--数据增强篇
  9. 计算机一级考试PPT视频教程
  10. Shell编程之字符串