Имеется такой код (Java):
class ClassName {
private int _field1;
...
ClassName(int f1) {
_field1 = f1;
}
int calcSomething(int cnt) {
return Utils.trunc(cnt * _field1 / 100 + 1);
}
}
Какой unit-test имеет смысл писать для метода calcSomething(), если мы хотим проверить нормальное расчетное поведение, а не граничные случаи?
1) res[] расчитаны вручную по формуле, но непонятно, что они означают
@Test
void calcSomething() {
final int INIT_VAL = 1234;
ClassName obj = new ClassName(INIT_VAL);
int[] cnt = {0, 1, 3, 17, 1024};
int[] res = {1, 13, 38, 210, 12637};
for (int i=0; i < cnt.length; ++i) {
assertThat(obj.calcSomething(cnt[i]), is(res[i]));
}
}
2) Показана формула расчета, но это полное дублирование кода метода!
@Test
void calcSomething() {
final int INIT_VAL = 1234;
ClassName obj = new ClassName(INIT_VAL);
int[] cnt = {0, 1, 3, 17, 1024};
for (int i=0; i < cnt.length; ++i) {
assertThat(obj.calcSomething(cnt[i]),
is(Utils.trunc(cnt[i] * INIT_VAL / 100 + 1)));
}
}