YaDeliveryTest ответьте на вопрос: как бы вы тестировали/проверяли корректность, полноту и неизбыточность ваших тестов? Как бы вы осуществляли эти проверки в автоматическом режиме?
Правильное использование техник тест-дизайна само по себе дает в результате корректные, полные и неизбыточные тесты) Разбить входные данные для задачи на классы эквивалентности, выделить граничные условия (актуально для расстояния доставки, потому что аргумент представляет собой диапазон), выделить какие-то специфические условия (например, минимальная стоимось доставки). Далее составить матрицу трассировки, где посмотреть все ли требования покрыты, нет ли излишних проверок на одно и то же требование. Чтобы избежать полного перебора входных аргментов, можно использовать pairwise. В результате получим набор тестов-кейсов, отвечающих требованиям из вопроса.
Мое видение как это можно автоматически проверять. Нам надо внутри тестируемого объекта перехватывать аргументы вызовов и подвергать их анализу и так же иметь доступ к результатам самого теста. Для анализа надо составить некоторую структуру, в которой будут храниться наборы аргументов для каждого тест-кейса, соответствующие сигнатурам тестируемых методов. Причем для аргументов в наборе должна быть возможноть указания некоторого диапазона значений (согласно какому-то классу эквивалентности). Так же каждому набору сопоставлен ожидаемый результат тестируемого теста. Сорри за тавтологию. Далее перехватываем вызовы во время прогона тестов и сопоставляем их со структурой. В идеальном случае каждый набор аргументов должен быть вызван по одному разу. Если несколько раз - скорее всего лишние проверки в рамках одного класс эквивалентности. Если какой набор аргумнтов из структуры не вызвали - значит что-то не протестировали. Так же проверяется ожидаемый результат теста. Это навскиду, первое что в голову пришло.