2008-09-24 2 views
5

누구나 System.Windows.Forms.Form 클래스에 결합 된 테스트 메서드를 성공적으로 구성 할 수 있습니까?뷰에 winforms를 사용하는 컨트롤러 클래스에 대한 단위 테스트를 작성하려면 어떻게해야합니까?

저는 최근 C# winforms 응용 프로그램에서 MVC 구조로 빌드하려고했습니다. 프레임 워크가 실제로이 점을 염두에두고 작성되지 않았기 때문에이 작업은 충분히 어렵습니다.

그러나 단위 테스트를 믹스에 포함 시키면 더 어려워집니다. 필자는 컨트롤러가 구체적인 뷰 클래스에 결합되지 않도록하여 단위 테스트를 위해 스텁/모의 (mub)를 사용할 수 있도록했습니다. 그러나 양식 클래스 어딘가에을 참조하는 것은 피할 수 없으며 이러한 방법을 테스트해야합니다.

나는 좋은 유형 안전 기능을 가지고 있으며 조롱 콘크리트 유형을 허용하기 때문에 Moq을 사용하고 있습니다. 그러나 불행하게도, 가상 또는 추상적이 아닌 구체적인 유형의 메소드 나 특성에 대한 호출을 "기대하는"것을 허용하지 않습니다. 그리고 Form 클래스는 서브 클래 싱을 염두에 두지 않았기 때문에 큰 문제입니다. 예를 들어, ShowDialog를 "예상"함으로써 실제 윈도우가 생성되지 않도록 Form 클래스를 조롱 할 수 있어야합니다.

그래서 내 견해가있는 Form의 하위 클래스와 많은 상호 작용을하는 단위 테스트를 실행할 수 없습니다.

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

다른 조롱 프레임 워크가 얻을 수있는 것입니까? 다른 조롱 프레임 워크에서 사용 된 문자열 기반 메서드가 동일한 제약 조건을 따르고 있습니까? 나 자신의 노골적인 장모 한 모의 수업을 쓸 수 있습니까? 아니면 가상 멤버가 없어도 창 동작을 그렇게 억제 할 수 없습니까?

폼 연결 코드가 메서드 및 클래스의 사소한 복잡성으로 끝나기 때문에 클래스를 구조화하지 않은 방법이 있습니다. 예를 들어, 명시 적으로 단위 테스트를 거치지 않고 도처에서 벗어날 수 있습니다. 양심이 나를 위해 나를 때리고 있니?

답변

3

GUI 요소를 사용하여 단위 테스트를 수행하는 데 가장 익숙한 방법은 Humble Dialog 패턴/방법입니다. 본질적으로 폼은 인터페이스 일 뿐이며 모든 실제 작업은 다른 클래스에서 수행됩니다. 기능을 제공하는 클래스를 단위 테스트 한 다음 GUI 이벤트를 해당 클래스의 적절한 메소드에 연결합니다.

0

현재 나의 생각은 Form 클래스에서 상속을 사용하지 않고 컴포지션을 분리해야 할 수도 있다는 것입니다.

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

+0

좋은 계획을 세우는 것이 자주 일어나지 않아야하기 때문에 좋지는 않습니다. 이것이 신뢰성 있고 잘 테스트 된 코드의 가격이라면 저렴한 가격으로 간주합니다. –

관련 문제