自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 别迷信O(1)

有些场景下,二分法会比hash快几倍。

2024-08-17 16:37:43 639

原创 策略模式的一次应用

使用这一模式后,每一种相似度算法不再是孤立的,而是成了有一个共同父类的兄弟类。节省了开发时间,也节省了测试时间,不用担心先前测试过的算法被新的算法影响。如果后面没有新需求,仍不需要考虑使用,以避免重构代码带来的时间成本。代码将非常有利于扩展,新增一个算法,只需继承父类,并实现纯虚函数。这一方案完成后,紧接着又一个需求:使用距离算法作为相似度算法。相似度的计算函数calculate()作为父类的纯虚函数,每新增一个算法,就在简单工厂中创建出一个新的子类对象。每个子类用不同的算法实现这一函数。

2024-08-04 08:22:01 273

原创 一个演示Junit4实现原理的ut

文|码术张本文旨在说明Junit4源代码的设计思想。说明方式上,使用的是自己的一个创新的想法:用一个ut来说明。代码如下;package test;import org.junit.Test;public class IpTest { @Test public void should_True() throws Exception{ MyNotifier notifier = new MyNotifier(); MyResult resul

2021-01-29 17:44:44 350

原创 构建java ut运行环境

一 安装jdk二 安装vscode

2021-01-26 17:48:06 398

原创 【JAVA-UT】21、spy--记录真实对象的行为

文|码术张埃德蒙对着下面这个类,皱着眉头,不知如何下手。public class TimeZoneActivator { public void activate(String newConfigs, String oldConfigs) { if (newConfigs == oldConfigs) { System.out.print("...

2019-12-31 19:53:45 695

原创 【JAVA-UT】20、ArgumentCaptor的使用

文|码术张有时,不仅要验证对象的方法是否被调用,还要检查传给方法的参数是否正确。今天,埃德蒙的工作是给类DownloadActive写ut。DownloadActive的功能是下载软件,并将成功与否的结果通知Listener.doTask首先做下载的动作,然后发通知。发通知,即调用listener的report方法。为了方便说明,将doTask简化,只是通知侦听者们一个字符串“OK”。...

2019-12-31 19:49:35 2674

原创 【JAVA-UT】19、如何做final class的mock对象

文|码术张这几天,埃德蒙的ut工作很顺利,风平浪静。代码覆盖率不断提高,犹如正在加热的水温一样。不过在水沸腾前,还要克服几个困难。今天他遇到了一个困难:如何mock一个final类?NameLoader是一个final类,也就是一个不能被继承的类。它有一个方法download, 用来从服务器上获取一个字符串。参数addr是服务器地址。假设服务器上只保存一个字符串。public ...

2019-12-31 19:48:12 3808 2

原创 【JAVA-UT】18、when--指定mock对象的返回值

文|码术张真实对象有自己的行为;mock对象没有。于是拿到输入后,真实对象有输出,mock对象没有输出。为了让mock对象模拟真实对象,就要给mock对象一个输出。在Mockito中,如何给mock对象一个输出呢?这就要用到when语句。when语句常用的4种类型,一一介绍如下。1 when(mockObject.methodA(input1)).thenReturn(output...

2019-12-31 19:45:09 4161

原创 【JAVA-UT】13、什么是依赖?

1、什么是依赖?一个类A,使用另一个类B,则说A依赖B。也说B是A的依赖(dependency)。2、为什么在单元测试中要消除依赖?因为依赖会增加资料开销,会降低代码重用性,。例如,一个类NameChecker, 检查名字是否在某一服务器上。首先,它需要从服务器上获取名字。然后,进行比较。从服务器获取名字的功能,假设由类NameLoader提供。这时NameLoader就是NameCh...

2019-12-31 19:36:32 1969

原创 【JAVA-UT】17、使用mock做单元测试的3步骤

前两节介绍了什么是mock。这节介绍如何使用mock。对于从没用过mock的读者,请先安装Mockito。它是一个优秀的mock框架。使用mock的过程,就像装一颗假牙。让我们跟着埃德蒙一起走进牙科医院。医生诊断出埃德蒙的一颗牙已经坏了,需要用假牙替换掉它。一星期后,假牙做好了,装入埃德蒙的口中。做了几次咬合动作,又被取出,打磨打磨。再装进去。直到医生认为满意为止。整个配假牙的过程...

2019-05-20 11:08:31 950

原创 【JAVA UT】16、mock与stub的比较

本节通过比较stub与mock,加深对stub、mock的认识。1、相同点都是在ut中消除依赖的一种方式。如前面两节,针对同一个类,在ut中分别使用了stub和mock,最后达到同样的测试效果。2、不同点2.1 实现方式不同stub需要手动实现被依赖项,而mock则是使用mock framework。在《什么是stub》中,依赖是NameLoader,ut中实际使用的是:NameL...

2019-04-25 14:08:48 608

原创 【JAVA UT】15、mock--消除依赖的另一种方法

一个ut只测一个类,当依赖其他类时,需消除依赖。消除依赖的方法,上节介绍了stub方法,本节介绍另一种方法:使用mock。本节的主题是展示使用mock可消除依赖 。至于mock的使用技巧,将在后面章节论述。为下面这个类写ut。public class NameChecker { private NameLoader nameLoader; public NameChecke...

2019-04-25 14:06:53 524

原创 【JAVA-UT】14、什么是stub

约翰接到一个任务,为下面这个类写ut。public class NameChecker { private NameLoader nameLoader; public NameChecker(NameLoader in) { nameLoader = in; } public boolean nameIsOnServer(String addr,...

2019-04-09 10:52:03 930

原创 【JAVA-UT】12、抛出了指定异常吗?

如何验证抛出的异常是指定的异常?下面介绍两种方法。方法一:public class Test1 { @Test(expected = IllegalArgumentException.class) public void test1() { throw new IllegalArgumentException(); }}期望的表达方式为(exp...

2019-04-09 10:51:02 920

原创 【JAVA-UT】8、After--个体的尾巴

文|码术张如果公共变量的值,在每个test运行后,需要归零,那么可以使用After。After就是在每个test运行后做一些工作。与AfterClass不同,AfterClass中的工作,是在所有test运行结束后才需要做。如果一个测试类有9个test,那么AfterClass只会执行一次,而After会执行9次。如何使用After?public class myAfterTest {...

2019-01-19 18:38:36 204

原创 【JAVA-UT】7、AfterClass--集体的尾巴

文|码术张在所有Test方法运行结束后,如果还要做点什么,怎么办?使用AfterClass。如何使用?举例如下:public class AfterClassTest { private static String names[] = new String[5]; @Test public void apple() { names[0] = "a...

2019-01-19 18:37:44 332

原创 【JAVA-UT】10、ClassRule--集体的规范

文|码术张#####一、ClassRule与Rule的比较下面两个类ClassRuleTest、TimeoutTest,分别使用ClassRule、Rule,来判断两个Test方法的运行时间。一个Test方法是should_timeout1,打印一个字母A后,睡眠2000ms。一个Test方法是should_timeout2,打印一个字母B后,睡眠2000ms。ClassRuleTest...

2019-01-19 18:35:52 669

原创 【JAVA-UT】9、Rule--个体的规范

文|码术张#####一、如何使用Rule下面这个测试类TimeoutTest,有两个Test方法,分别在打印一个字母后,睡眠2000毫秒和4000毫秒。public class TimeoutTest { @Test public void should_timeout1() throws InterruptedException { System.out.println("...

2019-01-19 18:28:09 326

原创 【JAVA-UT】3、Test--测试类的标识

文|码术张1、@Test的作用如下有一个类,类中有两个方法:m1,m2。如何将这个类变成一个测试类?将其中一个方法声明为@Test。比如,将m2声明为@Test。这时,这个类,就不是普通的类,而是一个用于单元测试的类。m2称为一个test case,能直接运行。按测试目的,添加方法体,运行,便会获得被测功能是否达到预期的信息。public class ResultTest { ...

2019-01-19 18:24:05 572

原创 【JAVA-UT】11、Runner--使用什么来运行你,我的UT

一、什么是Runner下面这个UT,对您来说,现在应该是小意思。public class ResultTest { @Test public void should_returnString() { // given String expectedString = "downLoadStatus: Fail, failureReason: cannot conn...

2018-06-07 17:05:30 1154

原创 【JAVA-UT】4、Assert--验证结果是否符合期望

总体上,一个Test包含三部分: 1. 条件、预期的设置。 操作一功能需要的条件,比如所需要的对象、参数值。 功能的预期结果是什么,明确表达出来。 2. 执行操作。 3. 确认结果。 确认结果是否是预期的结果。 如果符合预期,则功能正常。否则,不正常。如何确认结果是否与预期的一致? 这就是本节要回答的。 Assert类中,有很多种确认的方法。 按是否使用M...

2018-05-14 14:30:27 1410

原创 【JAVA-UT】6、Before--个体的前提

本节将说明Before注解的使用,以及与BeforeClass的区别。1、Before的使用首先介绍待测试的类TimerService。 其私有成员startedflag,用于标记定时器任务是否开启。 开启,为true。 没开启,为false。成员方法startTimer,用于开启定时器任务。 一个功能是: 在已开启的状态下,再次开启,返回false,表示不能再开启了。...

2018-04-27 11:00:56 495

原创 【JAVA-UT】5、BeforeClass--集体的前提

上节介绍了ut编写的6个步骤。 本节演示注解BeforeClass的使用,以及说明为什么要使用它。 介绍BeforeClass前,先来看个例子吧。 下面是类Result.public Class Result { private String downLoadStatus; private String failureReason; public Result(Stri...

2018-04-24 10:30:58 559

原创 【JAVA-UT】2、写UT的科学步骤

本节演示如何写一个ut。 首先给出一个类Result。public Class Result { private String downLoadStatus; private String failureReason; public Result(String status, String reason) { downLoadStatus= status; ...

2018-04-24 10:28:40 5761

原创 【JAVA-UT】1、UT的意义

UT(Unit Test),单元测试,是method级别的测试。UT的价值,主要有3点。1. 尽早地发现软件错误想象一下,两个bug, 一个在UT阶段发现, 一个在系统测试阶段被发现, 付出的代价,两者相比,谁大?当然是后者付出的代价更大。 首先,发现的成本大。 投入了不同阶段的测试人员,最后在系统测试阶段被发现。其次,修改的成本大。 在系统测试阶段,发现一个问...

2018-04-24 10:25:57 2049

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除