Но что, если кто-то (надеюсь, дизайнер) захочет изменить Button
на MenuItem
? Ваш тест сломается, и вам придется это исправить. Одним из главных преимуществ MVVM является то, что дизайнеры действительно могут свободно размещать и изменять интерфейс по своему усмотрению, не требуя от разработчиков слишком много времени. Написание юнит-тестов против пользовательского интерфейса аннулирует это благо.
Я вроде играю адвоката дьявола здесь. Я не говорю, что тестирование пользовательского интерфейса совершенно бесполезно и никогда не имеет места в чьей-либо базе кода. Я хочу сказать, что отдача уменьшается, и вы можете обменять одну проблему на другую.
Что касается того, как вы на самом деле тестируете представление в «изоляции». , , Я думаю, что самый простой способ - использовать модели представлений с внедренными имитационными сервисами. Ваши модели представлений могут использовать локатор сервисов для захвата зависимых сервисов, поэтому ваши модульные тесты могут внедрять фиктивные сервисы. Затем можно использовать комбинацию ссылок на именованные элементы, обход дерева визуалов и API-интерфейсы автоматизации пользовательского интерфейса WPF, чтобы утверждать, что для разных визуальных элементов свойства установлены так, как ожидалось.