보기에 WinForms를 사용하는 컨트롤러 클래스에 대한 단위 테스트를 어떻게 작성할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/128086

문제

필요에 따라 System.windows.forms.form 클래스에 결합 된 테스트 방법을 성공적으로 수행 할 수 있었습니까?

최근에 C# Winforms 응용 프로그램을 작업하여 MVC 구조로 구축하려고합니다. 프레임 워크가 실제로 이것을 염두에두고 구축되지 않았기 때문에 이것은 충분히 어렵습니다.

그러나 단위 테스트를 믹스에 던지면 더욱 어려워집니다. 컨트롤러가 콘크리트 뷰 클래스에 결합되지 않도록하여 단위 테스트를 위해 스터브/모의를 사용할 수 있도록했습니다. 그러나 양식 클래스를 참조합니다 어딘가에 피할 수 없으며 이러한 방법을 테스트해야합니다.

나는 사용하고있다 모크 좋은 유형 안전 기능이 있으며 콘크리트 유형을 조롱 할 수 있기 때문입니다. 그러나 불행히도, 그것은 가상이나 추상적이지 않은 구체적인 유형의 방법이나 속성에 대한 호출을 "기대"할 수 없습니다. 그리고 양식 클래스는 서브 클래스를 염두에두고 구축되지 않았기 때문에 이것은 큰 문제입니다. 예를 들어 쇼 디 알로그를 "기대"함으로써 실제 창이 생성되는 것을 방지하기 위해 양식 클래스를 조롱 할 수 있어야합니다.

그래서 나는 내 뷰의 서브 클래스와 많은 상호 작용을하는 단위 테스트를 실행할 수 없습니다.

이 유형의 코드를 성공적으로 테스트 한 사람이 있습니까? 넌 어떻게 그걸 했니?

이것이 다른 조롱 프레임 워크가 돌아 다닐 수있는 것입니까? 다른 조롱 프레임 워크가 사용하는 문자열 기반 방법에 동일한 제약 조건이 적용됩니까? 내 자신의 명백한 장거리 모의 수업을 작성할 수 있습니까? 아니면 가상 회원의 부족으로 인해 창문 동작을 그런 식으로 억제 할 수 없습니까?

아니면 양식 커플 코드가 사소한 복잡성의 방법과 클래스로 끝나도록 내 수업을 구조화 할 생각이 없었으므로 양심이 나를 때리지 않고 명시 적으로 테스트하지 않고 도망 갈 수 있도록 그것을 위해?

도움이 되었습니까?

해결책

GUI 요소로 단위 테스트에 사용한 가장 좋은 방법은 다음과 같습니다. 겸손한 대화 패턴/방법. 본질적으로, 양식은 단지 인터페이스 일 뿐이며 모든 실제 작업은 다른 클래스에서 수행됩니다. 기능을 제공하는 클래스를 테스트 한 다음 GUI 이벤트를 해당 클래스의 적절한 방법에 묶습니다.

다른 팁

현재의 생각은 컨트롤러를 해체하기 위해 양식 클래스와 상속하기보다는 구성을 사용해야 할 수도 있다는 것입니다.

이것은 내가 계획하지 않은 양식 클래스의 멤버를 사용할 때마다 내보기 인터페이스에 명시 적으로 추가해야한다는 단점이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top