学习交流

详解单元测试的构成

2018-01-04 17:48:43 | 来源:中培企业IT培训网

通常来说,单元测试和开发人员相关度很高。中培《软件自动化测试与持续集成》的刘老师认为,主要的原因是:根据定义,单元测试用于测试系统中与其他部分隔离、定义良好的部分。因此,它们比较容易编写和使用。

许多构建系统已经内置对单元测试的支持,不用花费太大力气就可以使用。

例如Maven,就有这样的约定:描述如何写测试才能让构建系统找到测试、执行测试并最终准备报告结果。编写测试基本上可以归结为编写测试方法,通过在源代码加注解来标记它们。因为这些都是普通的方法,所以它们可以做任何事情,但是根据约定,应该编写测试,这样就不需要花费很大的力气去运行。如果测试代码开始需要复杂的设置和运行时依赖,我们处理的就不再是单元测试了。

这里单元测试和功能测试的差别很让人困惑。通常来说,相同的底层技术,类库会在单元测试和功能测试之间重复使用。

复用一般来说是一件好事情,因为它可以让你工作在另一个领域时,从你的专业领域中获益。尽管如此,还是会时不时地带来困扰,你必须打起精神,花费一些力气,确保你正在做正确的事情。

—般的JUnit和特殊的JUnit你需要一些东西去运行你的测试。JUnit是一个框架,它可以让你在Java代码中定义和运行测试。

JUnit属于统称为xUnit的测试框架家族。SUnit是这个家族的祖先,由Kent Beck在1998年为Smalltalk语言而设计。

JUnit是Java语言的测试框架,同样想法被移植到了其他语言,如C#。C#对应的测试架毫无想象力地叫作NUnit。N来自.NET,微软软件平台的名字。

在话题继续之前,我们需要了解下面的命名法则。命名的法则不特定于JUnit,但是我们会用JUnit作为例子来熟悉涉及到的定义。

测试运行器( Test runner):测试运行器运行由xUnit框架定义好的测试。

JUnit可以通过命令行去运行单元测试,Maven使用的测试运行器叫作Surefire。

测试运行器也会同时收集和汇报测试结果。以Surefue为例,报告是XML格式的,并且可以被其他工具进一步处理,如可视化。

测试用例(Test case):测试用例是最基本类型的测试定义。

用不同的JUnit版本创建测试用例存在些许不同。在早期的版本中,需要从JUnit基类继承,最近的版本中,只需要给测试方法添加注解。这样的方式会更好些,因为Java不支持多继承,而且你有可能想使用自己的继承结构而不是JUnit的继承结构。按照约定,Surefire也会定位类名前缀为TeSt的测试类。

测试夹具( Test fixt"res):测试夹具是测试用例可以依赖的一个已知状态,可以使测试具有良好定义的行为。开发者有责任去实现这些测试夹具。测试夹具有时也被称为测试上下文( test context)。

在JUnit中,你通常会使用@Before和@After注解去定义测试夹具。@Before,顾名思义,是在测试用例前运行,用于准备好整个环境。同理,如果有需要,用 @After来恢复成初始状态。

有时,为了更好表意,@Before和@After也被命名为Setup和虿eardovvn。因为使用了注解,在上下文中方法可以有最直观的名字。

测试套件(TeMsuites):在测试套件中你可以将测试用例分组。测试套件通常是一组共享测试夹具的测试用例。

测试执行器(Test exeeUtion):测试执行器运行测试套件和测试用例。

这里结合了前面的所有方面。定位测试套件和测试用例,创建相关的测试夹具,然后运行测试用例。最后,收集和整理测试结果。

测试结果格式化工具( Test result formatter):测试结果格式化工具格式化测试输出结果,方便人们阅读。JUnit使用多种多样的格式,可以被其他和JUnit没有直接关联的测试框架和格式化工具使用。所以,如果你的一些测试没有使用任何的xUnit测试框架,你还是可以通过提供XML格式的测试结果,将其展示在Jenkins中。因为文件格式是XML,如果有必要,你也可以用自己的工具去生成。

断言(Assertions):断言是xUnit框架的一种构造,用来确保条件被满足。如果条件没有满足,它会认为这是个错误,并且汇报这个测试错误。测试用例通常在断言失败时终止。

想了解更多IT资讯,请访问中培伟业官网:中培伟业

猜你喜欢