我开始相信单元测试高级,编写良好的代码,需要大量使用模拟对象,几乎没有任何价值.我想知道这个断言是否正确,或者我错过了什么?
高级别是什么意思?这些是靠近食物链顶端的类和功能.它们的输入和输出往往是用户输入和用户界面.他们的大部分工作包括获取用户输入并对较低级别的实体进行一系列调用.它们通常很少或没有有意义的返回值.
写得好,我的意思是什么?在这种情况下,我指的是与其依赖关系(使用接口和依赖注入)分离的代码,并且逐行处于一致的抽象级别.没有棘手的算法,也没有条件限制.
我讨厌为这种代码编写单元测试.单元测试几乎完全由模拟对象设置组成.逐行,单元测试读取几乎像执行镜像.实际上,我通过查看实现来编写单元测试."首先我断言这个模拟方法被调用,然后我断言这个模拟方法被调用......"等我应该测试方法的行为,而不是它调用正确的方法序列.另一件事:我发现这些测试对于重构来说非常脆弱.如果测试非常脆弱,那么当被测代码被重构时,它会完全破碎并且必须重写,那么单元测试的主要好处之一是否已经丢失了?
我不希望这篇文章被标记为议论性的,或者不是问题.所以我将直接陈述我的问题:对我所描述的代码进行单元测试的正确方法是什么,或者是否理解并非一切都需要单元测试?
IntelliJ IDEA无法解析内置JVM类型和方法的常见原因是什么?例如,当我将鼠标悬停String在工具提示上时说"无法解析符号'字符串'".就好像IntelliJ不知道JVM在哪里.
顺便说一句,我正在运行OS X 10.6.6.在我今天早上运行系统更新之前,一切正常.
有什么区别map和flatMap功能Iterable?
在JavaScript中,对象和哈希之间有什么区别?你如何创造一个与另一个,你为什么要关心?以下代码示例之间是否有区别?
var kid = {
name: "juni",
age: 1
}
Run Code Online (Sandbox Code Playgroud)
和:
var kid = new Object();
kid.name = "juni";
kid.age = 1;
Run Code Online (Sandbox Code Playgroud)
和:
var kid = new Object();
kid["name"] = "juni";
kid["age"] = 1;
Run Code Online (Sandbox Code Playgroud)
你能想到我应该说明的任何其他代码示例吗?
这里的核心问题是对象和哈希之间的区别是什么?
公共父元素在XML中出现的顺序是XML文档捕获的有意义的数据,还是未指定为有意义的顺序?例如,考虑两个XML文档:
<people>
<person name="sam"/>
<person name="juni"/>
</people>
Run Code Online (Sandbox Code Playgroud)
和
<people>
<person name="juni"/>
<person name="sam"/>
</people>
Run Code Online (Sandbox Code Playgroud)
这些文件是否被视为代表相同的数据,还是被捕获的顺序不同?
如何在Scala中测试引用相等性?
val x = new Obj
val y = x
x.referenceEquals(y) // evaluates to true
Run Code Online (Sandbox Code Playgroud) 如何在httpcomponents httpclient中设置连接超时?我在http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html找到了文档,但不清楚这些参数是如何实际设置的.
此外,之间的区别的解释SO_TIMEOUT和CONNECTION_TIMEOUT将是有益的.
我正在使用带有Scala插件的IntelliJ IDEA.如果我在代码中引用HashMap,然后使用Alt-Enter添加导入,则包将导入为:
_root_.scala.collection.immutable.HashMap
Run Code Online (Sandbox Code Playgroud)
这根本部分是什么?它似乎可以使用和不使用它.
scala ×4
c++ ×1
http ×1
java ×1
javascript ×1
json ×1
mocking ×1
monads ×1
unit-testing ×1
xml ×1