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

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

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实际上是对内部状态的简单反映,因此可以在测试中测试该+构造函数。

以上是 如何对构造函数进行单元测试 的全部内容, 来源链接: utcz.com/qa/426708.html

回到顶部