如何对构造函数进行单元测试
我有一堂课要添加单元测试。该类具有多个构造函数,这些构造函数采用不同的类型并将其转换为规范形式,然后可以将其转换为其他类型。
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);
}
}
实际上,它接受并转换为其他两种类型。
我正在尝试找出最合适的方法来测试这些构造函数。
应该有一个针对每个构造函数的测试和输出类型:
@Testpublic void longConstructor_getLong_MatchesValuePassedToConstructor() {
final long value = 1.00l;
Money m = new Money(value);
long result = m.getLong();
assertEquals(value, result);
}
这导致许多不同的测试。如您所见,我正在努力命名它们。
应该有多个断言:
@Testpublic 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
方法。
@Testpublic 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