Кто-нибудь смог успешно выполнить юнит-тестирование методов, которые по необходимости связаны с классом System.Windows.Forms.Form?
Недавно я работал над приложением winforms на C #, пытаясь построить его со структурой MVC. Это достаточно сложно, учитывая, что фреймворк на самом деле не построен с учетом этого.
Однако, это становится еще сложнее, когда вы бросаете юнит-тестирование в микс. Я позаботился о том, чтобы мои контроллеры не были связаны с конкретными классами представления, чтобы я мог использовать заглушку / макет для модульного тестирования. Но ссылка на класс Form где-то неизбежна, и эти методы необходимо протестировать.
Я использую Moq , потому что он обладает некоторыми хорошими функциями обеспечения безопасности типов и позволяет имитировать конкретные типы. Но, к сожалению, это не позволяет мне «ожидать» вызовов методов или свойств конкретного типа, которые не являются ни виртуальными, ни абстрактными. И поскольку класс Form не был создан с учетом подклассов, это большая проблема. Мне нужно иметь возможность макетировать класс Form, чтобы предотвратить создание реальных окон, например, «ожидая» ShowDialog.
Так что я остался не в состоянии запускать какие-либо модульные тесты, которые сильно взаимодействуют с подклассами Form, как и мои взгляды.
Есть ли кто-нибудь, кто успешно провёл модульное тестирование этого типа кода? Как ты это сделал?
Это то, что другие насмешливые рамки могут обойти? Будут ли на основе строковых методов, используемых в других макетных средах, такие же ограничения? Могу ли я написать свои собственные явные классы для длинных рук, или нехватка виртуальных членов не позволит мне так же подавить поведение окна?
Или есть какой-то способ, которым я не придумал структурировать свои классы так, чтобы код, связанный с Forms, заканчивался методами и классами тривиальной сложности, так что я мог уйти без явного модульного тестирования их, без моей совести бить меня за это?