Обычно тестирование должно затрагивать все (исполняемые) строки кода.Если вы реализуете интерфейс, это делает его намного проще, поскольку вы можете кодировать тесты, которые формируют «контракт» интерфейса, и теперь тесты применяются ко всем разработчикам интерфейса.
Это обеспечивает согласованность для всехреализаторы.Если вы столкнулись с ситуацией, когда разработчики ведут себя по-разному (например, NullReferenceException и ArgumentNullException), вы можете добавить тесты, указывающие, что является «правильным», а что - неправильным.Это приведет к меньшему количеству сюрпризов в будущем.
Я мог бы даже сказать, что к каждому интерфейсу должен быть прикреплен набор тестов для описания ожидаемого поведения.
Конечно, есть реализацияконкретные вещи, которые можно протестировать только на конкретном разработчике (например, «Был ли файл записан?» или «Была ли запись исправлена?»).Эти вещи должны быть предоставлены через переопределение или лямбду в набор тестов интерфейса.