首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

写给精明Java开发者的测试技巧

我们都会为我们的代码编写测试,不是吗?毫无疑问,知道这个问题的答案可能会从 “当然,但你知道怎样才能避免测试吗?” 到 “必须的!测试”都有。...但是有些情况下,我们会将两个或者更多的类看做是一个单元。 在这里为各位读者留下一个练习:对这个方法进行完全重构,使其更容易测试。...我们遵循了AAA模式,并断言了一些发生了的事情——那么哪里错了? 首先,我们看到这个测试的名字:testFoo,并没有真正告诉我们这个测试在做什么事情,并且没有匹配任何一个我们在检查的断言。...有时,Spy应用程序在做什么,或者验证程序使用特定参数调用了特定方法并调用了指定次数,是很有用的。有时,我们触发数据库层,但又想模拟数据库返回给我们的响应。...有时,我们会使用Test Double(测试替身)一词来表示如上所述的任何类型的对象,我们测试中会和这些对象进行交互。 通常来说,spy提供了最少的功能,因为的目的就在于捕捉方法是否调用。

2.1K10

注释吗?你就输了

在某些情况下,敢说,注释可以弥补我们在代码中没有完全表达出来的意思。因此,注释不值得赞美,而是应该停下来问问自己,是否有更好的方式可以用代码来表达自己。 ?...例如,测试套件中的一条注释告诉我们添加这行代码是为了降低死锁的几率。...强制性注释 这肯定会引起争议。如果规定每个函数都需要一个 Java 文档或 Python docstring,是不是有点傻?大多数时候,类或函数名已经告诉我们注释所描述的内容,它们是多余的。...考虑下面的例子,第一个例子中的注释就变得没有必要了,因为有一个更好的函数名可以准确地告诉读者这个函数做了什么。...我们以前都见过这种情况,在某种程度上,我们自己也犯过这样的错误。我们一个模块或类,我们心里知道混乱而无序。我们知道一团糟。所以我们对自己说,“哦,最好加下注释!”不!你最好把代码梳理清楚!

43720
您找到你想要的搜索结果了吗?
是的
没有找到

夯实Java基础系列11:深入理解Java中的回机制

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针用来调用其所指向的函数时,我们就说这是回函数。...解答:回更像是一个约定,就是如果用了b()方法,那么就必须要回,而不需要显示调用 一、Java的回-浅 我们用例子来解释:小明和小李相约一起去吃早饭,但是小李起的有点晚要先洗漱,等小李洗漱完成后...二、Java的回-中 可是细心的伙伴可能会发现,小李的代码完全死了,这样子的场合可能适用和小明一起去吃饭,可是假如小李洗漱完不吃饭了,和小王上网去,这样子就不适用了。...不同的是我们新建一个吃饭的接口EatRice,接口中有个抽象方法eat()。在小明中调用这个接口,并实现eat();小李声明这个接口对象,并且调用这个接口的抽象方法。...回接口,可以理解为老师接口 //回指的是A调用B来做一件事,B做完以后将结果告诉给A,这期间A可以做别的事情。 //这个接口中有一个方法,意为B做完题目后告诉A时使用的方法

51240

夯实Java基础系列9:深入理解Class类和Object类

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针用来调用其所指向的函数时,我们就说这是回函数。...解答:回更像是一个约定,就是如果用了b()方法,那么就必须要回,而不需要显示调用 一、Java的回-浅 我们用例子来解释:小明和小李相约一起去吃早饭,但是小李起的有点晚要先洗漱,等小李洗漱完成后...二、Java的回-中 可是细心的伙伴可能会发现,小李的代码完全死了,这样子的场合可能适用和小明一起去吃饭,可是假如小李洗漱完不吃饭了,和小王上网去,这样子就不适用了。...不同的是我们新建一个吃饭的接口EatRice,接口中有个抽象方法eat()。在小明中调用这个接口,并实现eat();小李声明这个接口对象,并且调用这个接口的抽象方法。...回接口,可以理解为老师接口 //回指的是A调用B来做一件事,B做完以后将结果告诉给A,这期间A可以做别的事情。 //这个接口中有一个方法,意为B做完题目后告诉A时使用的方法

38130

python接口自动化 之 Mock服务的使用

1、什么是mock Mock这个词在英语中有模拟这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西。...准确的说,Mock是Python中一个用于支持单元测试的库,的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。...「隔离系统」假如我们需要调用一个post请求,为了获得某个响应,来看当前系统是否能正确处理返回的“响应”,但是这个post请求会造成数据库中数据的污染,那么就可以充分利用Mock,构造一个虚拟的post...「测试覆盖度」假如有一个接口,有100个不同类型的返回,我们需要测试它在不同返回下,系统是否能够正常响应,但是有些返回在正常情况下基本不会发生,比如,我们需要测试在当接口发生500错误的时候,app是否崩溃...,别告诉你一定要给服务端代码做些手脚让他返回500 。

29030

一文搞懂性能测试

“压力测试是在超过预期负载时系统的运行情况”,“容量测试是使系统承受超额的数据容量来发现它是否能够正确处理”。 来吧,就算语文不好,也认字的,谁能告诉这两者的区别是什么?除了字不一样。...作为可能集体轰炸的话题,既然已经摆上了台面,还是要冒死给一个自己认为的合理定义: 性能测试针对系统的性能指标,建立性能测试模型,制定性能测试方案,制定监控策略,在场景条件之下执行性能场景,分析判断性能瓶颈并优...这个话题我们后面再描述。 性能测试需要有模型 模型是什么?它是真实场景的抽象,可以告诉性能测试人员,业务模型是什么样子。...在压力流量之下,模拟异常。这个异常的定义是很宽泛的,在下一篇文章里,我们再细说。 很多性能测试工程师,都把场景叫成了测试用例。...如果一个用户点击了一次,发出来3个HTTP Request,调用了2次订单服务,调用了2次库存服务,调用了1次积分服务,那么这个Request该如何计算?

76820

【Java】深入浅出Java回原理

废话不多说,像许多网上介绍回机制的文章一样,这里也以一个现实的例子开头:假设你公司的总经理出差前需要你帮他办件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差吧,于是就他告诉你他的手机号码叫你如果事情办完了你就打电话告诉他一声...;这是一个现实生活中常能碰到的例子,我们用呢就用代码的方式来实现一个这个过程,看一下这个过程究竟是怎样的。...你问我也不清楚哈~这你得问Sun公司了,不过我们从代码的执行过程可以看出数据的流向大致是Manager—–>Personnel—–>Manager,这不就是一个“回”的过程么?...,但是这些杂七杂八的大爷们都要求做完事情就电话通知,每个类都会有一个类似phoneCall的方法作为回方法,这时,我们利用面向对象的思想来看是不是可以把这个方法抽象出来作为一个独立的抽象类或接口呢...多态的思想油然而生~~鉴于JAVA接口的好处,我们就定义一个名为CallBack的接口作为回接口,再在该接口下定义一个名为backResult的抽象方法作为回方法,让那些总经理类啦经理类啦主管类啦~

23430

夯实Java基础系列11:深入理解Java中的回机制

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针用来调用其所指向的函数时,我们就说这是回函数。...解答:回更像是一个约定,就是如果用了b()方法,那么就必须要回,而不需要显示调用 一、Java的回-浅 我们用例子来解释:小明和小李相约一起去吃早饭,但是小李起的有点晚要先洗漱,等小李洗漱完成后...二、Java的回-中 可是细心的伙伴可能会发现,小李的代码完全死了,这样子的场合可能适用和小明一起去吃饭,可是假如小李洗漱完不吃饭了,和小王上网去,这样子就不适用了。...不同的是我们新建一个吃饭的接口EatRice,接口中有个抽象方法eat()。在小明中调用这个接口,并实现eat();小李声明这个接口对象,并且调用这个接口的抽象方法。...//这个接口中有一个方法,意为B做完题目后告诉A时使用的方法。 //所以我们必须提供这个接口以便让B来回

36400

小兔JS教程(三)-- 彻底攻略JS回函数

无非就只是一个变量的名字而已。 比如你 var a = 10; 这个你肯定知道,a只是随便的,b、c、都可以,没有问题。那callback不也是一个意思吗?...**** 首先,我们在运用jQuery的时候,是不是总是这样的代码: $(function(){ }); 很显然,这个就是回函数,$本身就是一个函数的名字,没有道理不相信,就问你,它是不是打了括号...在函数体里面alert一下,肯定会给我弹出一个提示来。为什么会这样呢,毫无疑问,jQuery肯定在里面把这个函数执行了。...也就是说,只是写了一个还未被执行的函数传进去了,这是一个函数。知道,传进去以后,你肯定会在某个地方打一个括号帮我执行的,就算不执行,它也肯定会这个函数赋值给其他变量。...那么在这一讲的最后,我们就来模拟jQuery的写法,封装一个类似的功能吧!

4K70

Elasticsearch 8.X DSL 如何优化更有助于提升检索性能?

拿 228 万+的微博数据(JMeter 模拟100用户并发)作为样例索引数据进行验证。 实验1:嵌套 10 层;执行 5 次,平均耗时:835 ms。...之前血淋淋的教训告诉大家,非必要不使用 wildcard ! 尤其数据量大的场景。 参见:Elasticsearch 警惕使用 wildcard 检索!然后呢?...我们同样对比一下性能。 初步结论:加上 track_total_hits,检索会变慢,我们要结合业务场景谨慎使用。 2.4 问题4:track_scores 确认是否必要使用!...如果对排序加上评分处理,需要加这个参数。 2.5 问题5:"_source": {"includes": [ 确认是否必须 其实有更快的建模方式,就是 store 设置 true 对字段单独建模。...一个线上问题引发的思考——Elasticsearch 8.X 如何实现更精准的检索? 2.7 问题7:建议线上使用复杂DSL,可以使用性能测试验证一下。

75130

那些年错过的React组件单元测试(上)

然后翻阅了大量的文档,发现基于dva的单元测试文档比较少,因此在有了一番实践之后,梳理了几篇文章,希望对于使用 Jest 进行 React + Dva + Antd 单元测试的你能有所帮助。...对于当前测试代码来说,异步代码什么时候执行并不知道,因此解决方法很简单。...jest提供了三种方案来测试异步代码,下面我们分别来看一下。 done 关键字 当我们的test函数中出现了异步回函数时,可以给test函数传入一个done参数,它是一个函数类型的参数。...在单元测试中,我们可能并不需要关心内部调用的方法的执行过程和结果,只想知道它是否正确调用即可,甚至会指定该函数的返回值。这个时候,mock的意义就很大了。...然后调用axios.get的时候,不会真实的请求这个接口,而是会以我们的{ data: ['Cosen','森林','柯森'] }去模拟请求成功后的结果。

4.9K20

如何编写出高质量的 equals 和 hashcode 方法

equals 方法:Object 类中的 equals 方法用于检测一个对象是否等于另一个对象,在 Object 类中,这个方法将判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的...为什么需要重写 equals 方法和 hashcode 方法主要是基于以下两点来考虑: 1、我们已经知道了 Object 中的 equals 方法是用来判断两个对象的引用是否相同,但是有时候我们并不需要判断两个对象的引用是否相等...我们使用一个小 Demo 来模拟一下特殊场景,让我们更好的理解为什么需要重写 equals 和 hashcode 方法我们的场景是:我们有很多篇文章,需要判断文章是否已经存在 Set 中,两篇文章相同的条件是访问路径相同...2、使用 instanceof 运算符来检查参数是否具有正确的类型。如果不是,则返回 false。 3、参数转换为正确的类型。因为转换操作在 instanceof 中已经处理过,所以肯定会成功。...hashcode 方法的还是非常好的,个人比较喜欢用官方的东西,觉得他们考虑的肯定比我们多很多,所以我们 Article 类的 hashcode 方法就可以这样 /** * 重写

82160

vue菜鸟从业记:公司项目里如何进行前后端接口联

王小闰又没日没夜的敲了一天代码之后,首页header区域、轮播图以及导航图标的页面布局和逻辑开发都实现了,此时他调用后端数据测试下流程,但是后端程序猿还没有将该数据的接口开发出来,没办法,的朋友王小闰此时只能在本地模拟点假数据...什么是前后端接口联 之前开发代码的时候,所有的ajax数据都不是后端返回的真实数据,而是我们自己通过接口mock模拟的假数据,当前端的代码编写完毕,后端的接口也已经写好之后,我们就需要把mock数据干掉...,尝试使用后端提供的数据,进行前后端的一个调试,这个过程我们就把称之为前后端的接口联。...为什么要联 本地的mock数据是王小闰自己的,肯定符合前端需求,但是后端接口首先需要测试通不通,还需要测试数据格式对不对,还有后端有没有填写足够的数据,比如列表页,前端分页,如果后端就写了两条测试数据...王小闰之前在项目根目录static文件夹下新建了一个mock文件夹,里面写了一些json文件,当我们做联的时候,这些mock数据就没用了我们要把mock数据切换成后端提供给我们的真实的数据。

1.1K10

浅谈Andorid开发中的MVP模式

导语:最近公众号后台经常收到一些消息,说能不能讲一些开发模式,经过思考后,决定讲一讲MVP模式。希望对大家能够有所帮助。并写了一个简单的小demo。 背景 看到MVP,大家肯定会想什么是MVP呢?...这个可以肯定的告诉大家MVP(Most Valuable Player)是最有价值球员的意思,这当然是开玩笑了。...不仅如此,我们还可以编写测试用的View,模拟用户的各种操作,从而实现对Presenter的测试--而不需要使用自动化的测试工具。...,其中获取用户信息用了一个线程进行了模拟获取。...Presenter与View交互是通过接口,所以我们需要定义一个IShowUserView的接口,这个接口封装的方法基本上都跟视图展示有关。

50910

自动化测试到底是什么

比如,之前我们会对电商系统的主流程做每日的UI层自动化回归测试,用来保证线上系统功能的正常,效果还不错。所以,用与不用关键在于的适用范围,只有在合适的范围内使用了合适的技术才会表现出最好的效果。...1.5.2接口层 接口层是现在在企业中应用最为广泛的自动化测试方法之一,的优点在于基本规避了UI层自动化测试的缺点,并且一旦形成较为稳定、完整的框架后基本上是比较通用的,不论是在Web端还是移动端都可以使用...初学者如何选择学习哪种技术 这个话题有点沉重,因为一旦表述不好肯定会被一些无良的人骂之,但思前想后还是决定这一章节。...首先,我们说说学习性能测试需要面临的几个挑战,大家可以结合自己的实际情况看看自己是否适合继续学习。 第一,庞大的知识体系,这个我们面临的第一个挑战。...不知你是否遇到过这样的场景,指着鼻子说:连一个SQL语句都不会写,连中间件是什么都不知道你还和我们讨论什么。

54990

自适应软键盘的Dialog以及监听软键盘弹起

,mCallback会回一个方法执行某些操作,那么这个,mCallback是什么呢?...在Android Studio中我们可以点击这个接口定义左边的向上箭头查看接口的实现类,我们发现,dialog也实现了这个接口,那么回到第一个需求,解决方法就简单多了,只需要自定义一个Dialog,然后重写...二,基于Dialog监听软键盘的弹起和收下: 其实看完第一个需求,我们可能已经猜想到,软键盘也是基于当前窗口的,的弹起和收下肯定会引起当前窗口布局的属性发生变化,所以解决思路就有了:监听当前布局的变化...这里是比较布局坐标中的下坐标的,因为如果键盘弹起的话,布局的下坐标肯定会变小。...这个方法中参数给我们了改变后view的左上右下的坐标,以及改变前view的坐标。

3.2K30

一个线程罢工的诡异事件

整个过程还是比较清晰的,就是一个典型的生产者消费者模型。 尝试定位 接下来便是尝试定位这个问题,首先例行检查了以下几项: 是否内存有内存溢出? 应用 GC 是否有异常?...但是由于里面的分支特别多(switch case),看着有点头疼;所以我与这个业务代码的同学沟通后他告诉确实也只是入口处解析了一下数据,后续所有的业务逻辑都是丢到线程池中处理的,于是便带着这个前提去排查了...因为这里消费的队列其实是一个 disruptor 队列;我们常用的 BlockQueue不太一样,不是由开发者自定义一个消费逻辑进行处理的;而是在初始化队列时直接丢一个线程池进去,它会在内部使用这个线程池进行消费...,同时回一个方法,在这个方法我们自己的消费逻辑。...由于 Worker 实现了 Runnable 接口,所以本质上就是调用了 runWorker() 方法

29330

一个线程罢工的诡异事件

整个过程还是比较清晰的,就是一个典型的生产者消费者模型。 尝试定位 接下来便是尝试定位这个问题,首先例行检查了以下几项: 是否内存有内存溢出? 应用 GC 是否有异常?...但是由于里面的分支特别多(switch case),看着有点头疼;所以我与这个业务代码的同学沟通后他告诉确实也只是入口处解析了一下数据,后续所有的业务逻辑都是丢到线程池中处理的,于是便带着这个前提去排查了...因为这里消费的队列其实是一个 disruptor 队列;我们常用的 BlockQueue不太一样,不是由开发者自定义一个消费逻辑进行处理的;而是在初始化队列时直接丢一个线程池进去,它会在内部使用这个线程池进行消费...,同时回一个方法,在这个方法我们自己的消费逻辑。...只看这次比较关心的部分;添加成功后会直接执行他的 start() 的方法。 ? 由于 Worker 实现了 Runnable 接口,所以本质上就是调用了 runWorker() 方法

39720

一个线程罢工的诡异事件

整个过程还是比较清晰的,就是一个典型的生产者消费者模型。 尝试定位 接下来便是尝试定位这个问题,首先例行检查了以下几项: 是否内存有内存溢出? 应用 GC 是否有异常?...但是由于里面的分支特别多(switch case),看着有点头疼;所以我与这个业务代码的同学沟通后他告诉确实也只是入口处解析了一下数据,后续所有的业务逻辑都是丢到线程池中处理的,于是便带着这个前提去排查了...因为这里消费的队列其实是一个 disruptor 队列;我们常用的 BlockQueue不太一样,不是由开发者自定义一个消费逻辑进行处理的;而是在初始化队列时直接丢一个线程池进去,它会在内部使用这个线程池进行消费...,同时回一个方法,在这个方法我们自己的消费逻辑。...由于 Worker 实现了 Runnable 接口,所以本质上就是调用了 runWorker() 方法

18810

Spring事务专题(四)Spring中事务的使用、抽象机制及模拟Spring事务实现

事务专题大纲 「对于专题大纲又做了调整哈,主要是希望专题的内容能够更丰富,更加详细」,本来是想在源码分析的文章中附带讲一讲事务使用中的问题,这两天想了还是单独一篇并作为事务专题的收尾篇,也是Spring...// 不是一个新事务的话,那么需要加入到已经存在的事务中 boolean isNewTransaction(); // 事务是否标记成RollbackOnly // 如果标记成了RollbackOnly...事务管理的一个标准流程 判断当前是否已经存在一个事务 应用合适的事务传播行为 在必要的时候挂起/恢复事务 提交时检查事务是否标记成为rollback-only 在回滚时做适当的修改(是执行真实的回滚/...,这些个方法可以在事务达到不同阶段后执行,可以认为定义了事务执行过程的一些回行为,这就是之前说的行为的同步。...我们先说第一个问题,因为是我们自己模拟,所以关于切点的定义我们就设置的尽量简单一些,不妨就直接指定某个包下的所有类。

90420
领券