Цитата:
можешь рассказать об этом применительно к методам с параметрами по умолчанию?
А я вообще не понял, что тебе сдались эти параметры по умолчанию. Что нового они приносят в плане тестирования? Этот вопрос был и выше, но я не понял твой ответ на него.
На мой взгляд ничего. Методы с параметрами по умолчанию надо тестировать точно также, как и методы с обычными параметрами. Все вот эти вопросы:
Цитата:
например, сколько тестирующих методов должно быть для метода с дефолтными параметрами?
= один тестирующий с несколькими ассертами?
= столько тестирующих, сколько различных комбинаций параметров для того, чтобы покрыть все значимые комбинации параметров? причем в каждом тестирующем методе должен быть только один ассерт?
= какое-то "достаточное" число test-методов? каков критерий достаточности?
должны возникать и в том случае, если метод и без дефолтных параметров. Более того, и ответы на них вроде будут те же самые.
Цитата:
каковы критерии необходимости и достаточности?
Здравый смысл.
У меня нет полного кода метода, а на твоей картинке я вижу только локальные методы (собственно даже начало метода класса на картинку не попало), поэтому никаких примеров привести не могу. Я обычно проверяю типичные сценарии использования и какие-то граничные условия.
Многие фреймворки для тестирования позволяют все возможные case-ы для проверки записывать в лаконичном табличном виде в виде комментариев и по ним уже генерить вызовы методов тестирования.Как то так:
PHP код:
import spock.lang.Specification
class MathSpec extends Specification {
def "Get the max value of two numbers"() {
expect: 'Should return the bigger number'
Math.max(a, b) == c
where:
a | b | c
1 | 0 | 1
2 | 3 | 3
}
}
Есть фреймворки, которые позволяют случайно генерить данные для тестирования (
https://github.com/fscheck/FsCheck). Как то так:
PHP код:
let revRevIsOrig (xs:list<int>) = List.rev(List.rev xs) = xs
Check.Quick revRevIsOrig
Но я не сторонник таких подходов.
Попробую объяснить. Этой мой unit test и это мой код, который я тестирую. Я его знаю. Я могу быть не уверен, работает ли он корректно, но подразумевается, что я достаточно хорошо его понимаю, чтобы выделить какие-то сценарии его использования (как стандартные, так и наоборот - неожиданные). Их и надо тестировать.