Я хотел спросить вас, в каких случаях имеет смысл проводить модульное тестирование статически типизированного функционального кода, как написано на haskell, scala, ocaml, nemerle, f # или haXe (последнее, что меня действительно интересует, но я хотел использовать знания крупных сообществ).
Я спрашиваю об этом, потому что из моего понимания:
Один из аспектов модульных тестов - иметь спецификации в работоспособном виде. Однако при использовании декларативного стиля, который непосредственно отображает формализованные спецификации для семантики языка, это даже на самом деле можно выразить спецификации в работоспособной форме в отдельном пути, который добавляет значение?
Более очевидным аспектом модульных тестов является отслеживание ошибок, которые невозможно выявить с помощью статического анализа. Учитывая, что функционально безопасный код типа является хорошим инструментом для кодирования, очень близкого к тому, что понимает ваш статический анализатор, может показаться, что вы можете сместить большую безопасность в сторону статического анализа. Однако простая ошибка, такая как использование
x
вместоy
(обе являются координатами) в вашем коде, не может быть покрыта. OTOH такая ошибка также может возникнуть при написании тестового кода, поэтому я не уверен, стоит ли это усилий.Модульные тесты вводят избыточность, что означает, что при изменении требований код, реализующий их, и тесты, охватывающие этот код, должны быть изменены. Эти накладные расходы, конечно, постоянны, так что можно утверждать, что это не имеет значения. На самом деле, в таких языках, как Ruby, это на самом деле не сравнивается с преимуществами, но, учитывая, что статически типизированное функциональное программирование охватывает большую часть базовых модульных тестов, создается ощущение, что это постоянные издержки, которые можно просто уменьшить без штрафа.
Из этого я могу сделать вывод, что модульные тесты несколько устарели в этом стиле программирования. Конечно, такое утверждение может привести только к религиозным войнам, поэтому позвольте мне свести это к простому вопросу:
Когда вы используете такой стиль программирования, в какой степени вы используете модульные тесты и почему (какое качество вы надеетесь получить для своего кода)? Или наоборот: у вас есть критерии , по которым вы можете претендовать на единицу статически типизированного функционального кода, покрытые статическим анализатором и , следовательно , без необходимости покрытия модульного тестирования?