У меня есть класс, к которому я добавляю юнит-тесты. В классе есть несколько конструкторов, которые принимают разные типы и преобразуют их в каноническую форму, которую затем можно преобразовать в другие типы.
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 (и через proStist 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);
}
Это устаревший класс, и я не могу изменить исходный класс.