Модульное тестирование очень специфической функции

Чтобы убедиться, что этот вопрос достаточно конкретен для стандартов в FAQ, я просто спрашиваю следующее: какие источники обсуждают наиболее распространенные способы применения модульного тестирования к очень конкретной функции, обычно функции, которая полагается на данные поставщика или другие очень специфические данные, такие как синтетические данные бесполезны в тесте? Если вас интересует дополнительная информация, читайте ниже.

Фон:

Я часто пишу модульные тесты в своей повседневной разработке кода, но я также стараюсь сделать свой код как можно более абстрактным и многоразовым. В новом проекте, к которому я присоединился, есть много случаев, когда код состоит из очень специфических функций, которые предназначены для приема очень специфически отформатированных входных данных и сохранения выходных данных в таблицах базы данных. Большая часть входных данных состоит из данных поставщика или других внутренних данных, и доступ к ним осуществляется посредством вызовов как API поставщика, так и собственных API.

Единственная идея, которая у меня есть до сих пор, - это проверить, какие виды сбоев возникают, когда входные данные плохо отформатированы. Я обязательно напишу этот тест, но он бесполезен для нашей команды в плане тестов. Намного более полезные тесты должны проверять правильность логики этих манипуляций с данными, что включает в себя проверку точности выходных данных на основе входных данных.

К сожалению, у меня нет наборов контрольных данных, по которым я точно знаю, каким должен быть результат. Другие предлагали создать мои собственные синтетические входные данные (например, матрицу всех единиц или что-то придуманное, где я могу предсказать, каким должен быть результат). К сожалению, операции, выполняемые функцией, очень нелинейны (группирование по взвешенным процентилям и получение совокупной статистики по каждой группировке процентилей). Любой тест этого, основанный на полностью надуманных синтетических входных данных, также не будет очень полезен для нас, и временные затраты на его форматирование, а затем запись в какую-то синтетическую таблицу выходной базы данных и чтение ее для проверки в виде модульного теста делает такой тест бесполезным.

Я знаю, что модульные тесты должны проверять только одно поведение. Я просто не знаю, как разделить функцию, которая выполняет что-то вроде агрегирования сложной статистики по взвешенным процентильным группам, и свести это к «всего лишь одному» для проверки.

Какие стандарты используются в этой настройке?


person ely    schedule 10.01.2013    source источник
comment
может быть, лучше подходит для programmers.stackexchange.com ?!   -  person Songo    schedule 11.01.2013


Ответы (1)


Я столкнулся с аналогичными проблемами с очень большими методами. Я бы посоветовал провести рефакторинг кода, используя внедрение зависимостей и придерживаясь принципа единой ответственности. Затем протестируйте каждый класс в соответствии с его ответственностью.

person Erds    schedule 10.01.2013