自动化单元测试
自动化单元测试
人们在使用“单元测试”这个术语时比较随意。这可能会导致困惑,特别是当人们开始声称他们的单元测试“花了很长的时间执行”时。为开发者测试定义一个常用词汇表有助于将测试进行有效的分类,从而创建一个有效的CI系统,能够执行快速的构建。
“单元测试”验证软件系统中所有小元素的行为,这些小元素通常都是一个类。但是有时候,单元测试和被测试的类之间的这种一对一的关系会被放大,因为一些被测试的类耦合程度较高。
代码清单6-1展示了利用TestNG框架编写的单元测试。TestNG是基于annotation的,因此@testng.test这样Javadoc一样的注释出现在了startPatternTest方法中。通过Java1.4的assert语句,这个测试用例验证了RegexPackageFilter类通过一个正则表达式模式正确地过滤了字符串。
代码清单6-1 使用TestNG的隔离单元测试
public class RegexPackageFilterTestNG {
/**
* @testng.test
*/
public void starPatternTest()
throws Exception{
Filter filter = new
RegexPackageFilter("java.lang.*");
assert
filter.applyFilter("java.lang.String"):
"filter returned false";
assert
!filter.applyFilter("org.junit.TestCase"):
"filter returned
true for org.junit.TestCase";
}
}
某些单元测试需要较少的外部依赖关系,这些依赖关系通常是其他的类。这些依赖的类本身比较简单,没有很复杂的类间关系。有时候,单元测试甚至使用模拟对象(mock),它们是一些简单的对象,用于替换真实的、复杂的对象。如果依赖的对象本身确实依赖于外部的实体,如一个文件系统或数据库,而这些外部对象又没有虚拟化,测试就变成了组件测试(后面定义)。
代码清单6-2展示了一个用Ruby写的单元测试的例子,它验证了一个过滤器的行为。这个测试仍然是一个单元测试,虽然它使用了两个类,RegexFilter和SimpleFilter,因为它只使用了一个类型来验证行为。
代码清单6-2 使用Ruby的隔离单元测试
require
"test/unit"
require "filters"
class FiltersTest <
Test::Unit::TestCase
def test_regex
fltr = RegexFilter.new(/Google|Amazon/)
assert(fltr.apply_filter("Google"))
end
def test_simple
fltr = SimpleFilter.new("oo")
assert(fltr.apply_filter("google"))
end
def test_filters
fltrs =
[SimpleFilter.new("oo"), RegexFilter.new(/Go+gle/)]
fltrs.each{ | fltr |
assert(fltr.apply_filter("I love
to Gooogle on the Internet"))
}
end
end
单元测试的关键在于没有外部的依赖关系,如数据库。这些外部的依赖关系通常会使测试建立和执行的时间变长。单元测试可以在开发周期的早期创建并执行(例如第一天)。因为编码和看到单元测试结果之间的时间很短,所以单元测试是一种有效的除错方法。
图书详细信息:
http://www.cnblogs.com/broadview/archive/2012/06/13/2548150.html本文节选自《持续集成:软件质量改进和风险降低之道》一书
[美]Paul M. Duvall (保罗.M. 杜瓦尔)Steve Matyas (史蒂夫.迈耶斯) Andrew Glover(安德鲁.格洛弗) 著
王海鹏 译
电子工业出版社出版
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2011-06-15 云中间件和云系统
2011-06-15 网站运营之前后一致
2011-06-15 网站运营之比较和差异化
2011-06-15 网络运营之对比原理
2009-06-15 Web专家周末聚会都会说点啥