构造函数对于测试者来说有点像自己咬自己的尾巴!还有测试者认为,构造函数有什么好测试的。不过既然是做单元测试,那么构造函数也是要进行测试的。
如何测试一个构造函数呢?
想法1:
大家知道通过构造函数可以创建一个对象,测试常考虑assertEquals()方法。这样看来测试非常简单,如果这样进行测试的话,只需写一行代码就够了。但是有个问题,如果你要创建期望值,那么没有问题,也就需要使用你要测试的构造函数。这样的测试有点难以给人满意。
现在通过分析我们将想法1设置为不是最好的测试办法。那么我们到底该怎么找出一个最优的测试方法来测试构造函数呢?
妙诀:
如果你的类有可读的属性值的话,那么办法很简单:你可以将它们与你传递给构造函数的参数进行比较。在这里,可读的属性值可以是一个直接的变量域,也可以通过get方法获取。
注意:
仅仅对测试而言---- 最常见的测试类的方法是,完全通过它们的public接口。如果你把这个作为准则的话,有时候你就必须给类添加public接口以取得需要的数据,用来验证特定的行为。
最简单的构造函数的测试程序:暴露所生成对象的内部状态,以验证被传递给构造函数的参数是否被设置成正确的属性值。例如:
public void testInitializationParameters(){
assertEquals(762, new Integer(762).intValue());
}
使用intValue()方法获取Integer对象内部的属性值,以验证我们传递给构造函数的参数是否正确的存储到对象中。get方法相当于这里的intValue方法。
如果你的类不能看到可读的属性值,那你就必须另外创建一些可观测的断点,用来验证构造函数的正确性。例如:
public void testInitizationParameters(){
BankDepositCommand command = new BankDepositCommand(
"123", Money.dollars(125,50),today());
assertTrue(command.isValid());
}
以上的技巧可以用来测试JavaBean。
讨论总结:
很多测试看起来都很简单,甚至被很多人认为不必去写什么测试。但是某些情况下,可能恰恰是这些我们认为不必去写测试的地方导致程序的缺陷的出现。因此如果你想降低错误的发生概率,请你还是要写测试,不管它有多么简单。
分享到:
相关推荐
4. PowerMock:PowerMock是一个扩展了其他模拟框架(如EasyMock和Mockito)的库,它能模拟静态方法、构造函数、final类和方法、删除静态初始化器等。在某些情况下,常规的模拟框架无法处理这些特殊情况,而PowerMock...
在实际应用中,我们可以结合Mockito、PowerMock等工具进一步增强测试能力,例如模拟静态方法、私有方法或构造函数的行为。此外,还可以考虑使用持续集成工具(如Jenkins、Travis CI)自动化测试过程,确保每次代码...
执行流程从JUnit测试生成测试方法和构造函数的测试路径 :sparkle:介绍使用调试器和面向方面的编程,为来自JUnit测试的被测试方法和构造函数计算测试路径。 :red_question_mark:如何使用在可以找到有关如何使用该应用...
2. **构造函数mock**:对于那些不允许实例化或包含复杂初始化逻辑的对象,PowerMock可以mock其构造函数,避免实际创建对象。 3. **final类和方法**:final类或方法通常难以测试,因为它们不能被继承或重写。...
测试类通常会有一个公共无参构造函数,以便JUnit可以实例化测试类。此外,你可以使用`setUp()`方法(在JUnit4中是`@Before`注解)来准备测试前的环境,以及`tearDown()`(在JUnit4中是`@After`注解)来清理测试后的...
此时,传统的JUnit测试方法就显得有些力不从心了,因为每个测试方法只能对应一组测试数据。为了解决这个问题,JUnit引入了参数化测试的概念,使得开发者能够通过一次性的定义多个数据集来覆盖多种测试场景。 #### ...
PowerMock是另一个在测试领域中非常有用的库,它可以模拟静态方法、构造函数、final类和方法、删除静态初始化器等。当与JUnit结合使用时,PowerMock可以帮助开发者在无法直接控制的情况下进行测试,这对于那些有复杂...
它扩展了JUnit和TestNG,允许开发者模拟静态方法、构造函数、私有方法和删除final修饰,这在进行复杂的测试场景模拟时非常有用。在encore工程中,powermock可以帮助我们隔离被测试代码,确保测试的准确性。 至于...
- **实验1JUnit单元测试基础.doc:** 这个文档可能详细介绍了如何编写第一个JUnit测试用例,包括基本的断言和测试方法的构造。 - **Junit源代码学习.pdf:** 这份PDF可能包含了对JUnit框架内部实现的深入分析,帮助...
它包括了各种测试技术,例如标准测试类、显示名称、断言、假设、禁用标签和过滤测试、实例生命周期、嵌套测试、构造函数和方法的依赖注入、测试接口和默认方法、重复测试、参数化测试、测试模板、动态测试等。...
例如,测试某个类的构造函数、 getter和setter方法、业务逻辑方法等。Junit提供了一些断言,例如assertEquals、assertTrue、assertFalse等,用于描述测试用例的断言。 六、 使用Junit进行抽象类测试 Junit可以用于...
NextDay类的构造函数可以没有参数,也可以有三个整数参数year、month、day,它们用于初始化日期。 NextDay类具有多个方法,包括set方法、lastDay方法、nextDay方法、equals方法和toString方法。set方法用于设置日期...
书中会涉及如何将JUnit测试结果整合到持续集成工具如Jenkins中。 10. **实战案例**:书中会有大量的实战案例,覆盖各种常见的测试场景,帮助读者巩固理论知识,并提高解决实际问题的能力。 通过阅读《单元测试之道...
1. **面向对象设计**:账户类可能会有构造函数、getter/setter方法、增加/减少余额的函数等,体现封装和数据抽象原则。 2. **异常处理**:转账过程中可能出现诸如余额不足、账号不存在等错误,项目会展示如何使用...
JUnit Platform为测试平台提供基础支持,JUnit Jupiter是新的编程和扩展模型,而JUnit Vintage则提供了对旧版本JUnit测试用例的兼容性支持。 JUnit5支持多种Java版本,并且包含了许多新的特性以及对现有功能的改进...
3. 构造函数`JunitB(String name)`调用了父类`TestCase`的构造函数,以确保测试用例的正确初始化。 4. `setUp()`方法在每个测试方法执行前被调用,用于设置测试所需的环境,例如创建对象或填充数据。 5. `tearDown...
它还支持生命周期回调、异常处理、为测试模板提供调用上下文、嵌套测试以及构造函数和方法的依赖注入等功能。 在测试实例的生命周期方面,JUnit 5进行了扩展,支持实例后处理和生命周期回调,并且允许在扩展中维持...