Здравствуйте, strannik747, Вы писали:
S>Имеется такой код (Java):
S>Какой unit-test имеет смысл писать для метода calcSomething(), если мы хотим проверить нормальное расчетное поведение, а не граничные случаи?
S>1) res[] расчитаны вручную по формуле, но непонятно, что они означают
Вполне нормально. Смысл значений можно в комментариях указать.
S>2) Показана формула расчета, но это полное дублирование кода метода!
Получается просто проверка присвоения значения полю класса. Дублирование кода смысла не имеет.
Я бы вынес саму формулу (return Utils.trunc(par1 * par2 / 100 + 1)) в статический метод и проверял бы ее отдельно.
Спасибо за ответ. Поясню, в чем смысл затруднений.
S>>1) res[] расчитаны вручную по формуле, но непонятно, что они означают A>Вполне нормально. Смысл значений можно в комментариях указать.
Так и делаю. Но смысла в этих цифирках нет никакого: клиент дал формулу, я посчитал несколько значений, клиент с ними согласился. То есть для меня, как программиста, этот юнит-тест ничего не поясняет, только демонстрирует правильность расчета нескольких значений.
A>Я бы вынес саму формулу (return Utils.trunc(par1 * par2 / 100 + 1)) в статический метод и проверял бы ее отдельно.
Проблема 1) придумывание нового говорящего имени для метода
Проблема 2) видимость его должен быть, как минимум, уровня пакета, чтобы тестировать (необходимость тестирования private-методов говорит о проблемах в дизайне), это делает его видимым для других классов в пакете
Проблема 3) в данном классе уже около 15 методов (все повязаны с 3-мя параметрами класса), причем 5 из них такие вот однострочные, вводить еще 5 статических методов как-то некрасиво
Здравствуйте, strannik747, Вы писали:
s> 1) res[] расчитаны вручную по формуле, но непонятно, что они означают
Имхо это. Плюс ссылка на описание откуда взято и что значит.
Здравствуйте, strannik747, Вы писали:
S>Имеется такой код (Java):
Utils.trunc(cnt * _field1 / 100 + 1)
Небольшой code review: этот код похож на вычисление целой доли от числа cnt. При этом доля выражена процентах (значение в процентах хранится в _field1).
Если это так, то функция будет работать неправильно при cnt=1000 _filed1=10.
Здравствуйте, strannik747, Вы писали:
S>1) res[] расчитаны вручную по формуле, но непонятно, что они означают
только этот.
S>2) Показана формула расчета, но это полное дублирование кода метода!
Ты что хочешь проверить? Что алгоритм правильно работает? Очевидно, ты не можешь его проверить повторной реализацией. Обязательно нужен какой-то другой способ проверки — либо другой алгоритм, либо, что самое простое (и наименее подвержено ошибкам), если известны численные ответы — эти самые ответы.