java集成测试_到底什么是集成测试?

你的问题其实要分两块儿来说,因为现在用的是手机所以先简要回答一二,不明白的话再补充。

单元测试就是最小代码单元的针对性测试,可以是对象的一个属性,检查是否存在或值是否有效等等;也可以是一个函数或方法,检查其行为或输出是否如预期或者代码执行效能等等。

集成测试是要测试若干代码单元整合行为的结果,但是测试的写法却不一定是简单的一加一加一……而是从高阶层面模拟一种行为的开始(比如路由跳转)然后测试结果的预期(如当前路径),在此黑盒当中代码的流转和交互会牵涉到多个代码单元,谓之“集成”。

Mock 是模拟依赖对象的,它既可以用于单元测试也可以用于集成测试,并没有使用场景的严格限制。即使说集成测试是覆盖多个代码单元的,但 mock 依然有用武之地。比如说某个场景下系统调用了某第三方库做了 http 请求,如果你确信这个第三方库是可靠的(带有良好测试的开源软件)或者你确信返回结果的格式是可以预期的,你一样可以把这个部分 mock 了,因为它与你所写的代码并没有直接关系。

除此之外还有很多测试手段,比如冒烟,验收等等,每一种测试都有自己的针对性目标,不一而同,略过不谈。

再来说说 CI,虽然 CI 也带“集成”二字,但它与之前提到的集成测试是不同的。

集成测试的目标是软件系统的内部行为(只不过行为的层级较高,不是单一代码单元的行为,后者是单元测试的范畴),和外部运行环境无关(比如操作系统和运行环境的差异),它是封闭的,编写集成测试往往是在假设外部环境理想化的前提下进行的。

而 CI 的集成,意在软件系统与运行环境的整合,重点不在于你写了哪些测试,而在于你的测试在特定的环境下是否能表现如一,也就是排除或扩展了理想化环境这一限定条件。所以 CI 的配置里一定会有对于运行环境的描述。

为什么要 CI 之后才入代码管理?因为开发者的本地环境是多变的,是不可靠的。本地跑测试通过只能说明在特定的环境下一切 OK,但真实的产品是跑在产品服务器上的,你很难强求所有的开发者都去把本地环境模拟成产品服务器,因此需要 CI 来模拟产品环境来把持最后一道关口(有时候还有一道人工随机测试在后面)。因为 CI 所模拟的环境可以保持一致性,所以才叫“持续”集成,它不会因为开发者的变化而改变对测试代码运行的参照环境。

你可能感兴趣的:(java集成测试)