(выношу из коммента мысли вслух)
С т.з. алгебры: многие алгебраические конструкции (моноиды, поля, категории...) имеют определение из двух частей:
1. что там есть (например, есть множество с выделенным элементом и есть двуместная операция) и
2. как оно себя ведет (например, эта операция ассоциативна, а тот выделенный элемент относительно нее нейтрален). И если первое обычно нормально описывается типами, то второе без завтипов редко можно описать, а с оными - все равно сложно и громоздко бывает. Так вот, тестами как раз можно описывать вторую часть, пусть и не очень надежно. Такие тесты можно считать частью типа.
С т.з. ремесла: покрытие некоторого кода тестами - это материальная справка о том, что данный код был запущен хотя бы единожды. Ибо некоторый код может быть написан, успешно скомпилирован, но он может вызываться в редких условиях, и потому довольно долго оставаться ни разу не проверенным. А если он накрыт тестом, то по крайней мере у нас есть справка, что он не совсем уж безумен.
С т.з. алгебры: многие алгебраические конструкции (моноиды, поля, категории...) имеют определение из двух частей:
1. что там есть (например, есть множество с выделенным элементом и есть двуместная операция) и
2. как оно себя ведет (например, эта операция ассоциативна, а тот выделенный элемент относительно нее нейтрален). И если первое обычно нормально описывается типами, то второе без завтипов редко можно описать, а с оными - все равно сложно и громоздко бывает. Так вот, тестами как раз можно описывать вторую часть, пусть и не очень надежно. Такие тесты можно считать частью типа.
С т.з. ремесла: покрытие некоторого кода тестами - это материальная справка о том, что данный код был запущен хотя бы единожды. Ибо некоторый код может быть написан, успешно скомпилирован, но он может вызываться в редких условиях, и потому довольно долго оставаться ни разу не проверенным. А если он накрыт тестом, то по крайней мере у нас есть справка, что он не совсем уж безумен.