当前位置: 首页 > 面试题库 >

如何对构造函数进行单元测试

路和悌
2023-03-14
问题内容

我有一堂课要添加单元测试。该类具有多个构造函数,这些构造函数采用不同的类型并将其转换为规范形式,然后可以将其转换为其他类型。

public class Money {
    public Money(long l) {
        this.value = l;
    }

    public Money(String s) {
        this.value = toLong(s);
    }

    public long getLong() {
        return this.value;
    }

    public String getString() {
        return toString(this.value);
    }
}

实际上,它接受并转换为其他两种类型。

我正在尝试找出最合适的方法来测试这些构造函数。

应该有一个针对每个构造函数的测试和输出类型:

@Test
public void longConstructor_getLong_MatchesValuePassedToConstructor() {
    final long value = 1.00l;

    Money m = new Money(value);
    long result = m.getLong();

    assertEquals(value, result);
}

这导致许多不同的测试。如您所见,我正在努力命名它们。

应该有多个断言:

@Test
public void longConstructor_outputsMatchValuePassedToConstructor() {
    final long longValue = 1.00l;
    final String stringResult = "1.00";

    Money m = new Money(longValue);

    assertEquals(longValue, m.getLong());
    assertEquals(stringResult, m.getString());
}

这有多个断言,这使我感到不舒服。它还正在测试getString(并通过代理toString),但未在测试名称中说明。命名这些更加困难。

通过关注构造函数,我是否完全错了?我应该只测试转换方法吗?但是随后的测试将错过该toLong方法。

@Test
public void getString_MatchesValuePassedToConstructor() {
    final long value = 1.00;
    final String expectedResult = "1.00";

    Money m = new Money(value);
    String result = m.getLong();
    assertEquals(expectedResult, result);
}

这是一个旧类,我无法更改原始类。


问题答案:

看起来您已经获得了“原始”值的规范方法(toLong在这种情况下)-因此,在获取
值时,只需测试所有构造函数都是正确的即可。然后,您可以测试getString()基于单个构造函数的其他方法(例如),因为您知道一旦各种构造函数完成后,它们都会使对象处于相同的状态。

这是假设有些白盒测试-即,您 知道toLong实际上是对内部状态的简单反映,因此可以在测试中测试该+构造函数。



 类似资料:
  • 问题内容: 如何在单元测试中测试 hashCode()函数? 问题答案: 每当我覆盖equals和hash代码时,我都会按照Joshua Bloch在“ Effective Java”第3章中的建议编写单元测试。我确保equals和hash代码是自反的,对称的和可传递的。我还确保“不等于”对所有数据成员均正常工作。 当我检查对equals的调用时,我还要确保hashCode的行为符合预期。像这样:

  • 问题内容: 我一直在学习AngularJS,并且在单元测试方面进展非常顺利,但是我遇到了一个棘手的问题。 假设我有一个简单的表格,例如: 如果我正在测试类似控制器的东西,我知道我会这样写(使用Jasmine + Karma): 但是我不知道我需要注入哪些服务,也没有运气在指南或文档中找到有关单元测试的文档。 一个单元如何在Angular中测试表单? 问题答案: 我不认为这是对此类内容进行单元测试的

  • 本文向大家介绍对Angular.js Controller如何进行单元测试,包括了对Angular.js Controller如何进行单元测试的使用技巧和注意事项,需要的朋友参考一下 一、写个简单的Angular App 在开始写测试之前,我们先写一个简单的计算App,它会计算两个数字之和。 代码如下: 二、简单说说里面涉及的一些基本概念: 创建一个 module 什么是angular.modul

  • 问题内容: 如您所知,异常情况下会引发异常。那么如何模拟这些异常呢?我觉得这是挑战。对于此类代码段: 有人有好主意吗? 问题答案: 其他答案已经解决了如何编写用于检查是否引发异常的单元测试的一般问题。但是我认为您的问题实际上是在询问如何获取代码以首先引发异常。 以您的代码为例。在简单的单元测试的环境中,很难在内部引发异常。问题是,为了使异常发生,代码(通常)需要在网络中断的计算机上运行。安排在单元

  • 在探索如何对Kafka流进行单元测试时,我遇到了,不幸的是,这个类似乎被版本(KAFKA-4408)破坏了 对于KTable的问题,是否有一个解决方案? 我看到了“mocked streams”项目,但首先它使用的是,而我使用的是,其次它是Scala,而我的测试是Java/Groovy。 这里的任何关于如何在不需要引导zookeeper/kafka的情况下对流进行单元测试的帮助都将非常棒。 注意:

  • 我有一个asp。net核心应用程序,该应用程序使用启动中定义的依赖项注入。应用程序的cs类: 这允许这样的操作: 这很整洁。但当我想进行单元测试时,这就成了一个问题。因为我的测试库没有启动。cs,其中我设置依赖项注入。因此,将这些接口作为参数的类将仅为null。 在上面的代码中,在测试库中,_matchRepository和_teamRepository将为空。:( 我可以做一些类似配置服务的事情