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