2011-07-06 2 views
2

C#으로 WinForms 사용자 정의 컨트롤을 작성하고 테스트하고 싶습니다. (TDD가 아니기 때문에 구성 요소를 작성하고 작동시키면서 시작했지만 항상 버그를 발견하는 것에 지쳐있었습니다. , 그래서 나는 지금 시험을 원한다). 내 문제는 내가 테스트하는 동안 자식 컨트롤 (팝업 메뉴)을 볼 수 없도록 만들 수 없다는 것입니다. :WinForms 사용자 정의 컨트롤 - 자식 컨트롤이 숨겨져 있습니다.

가 여기에 관련 테스트 코드의 - (나는 가 표시하는 싶지 않아,하지만 난 여전히 정상적으로 실행 때이 나타날 것 있는지 확인하려면 나는 그것이 표시되지 않습니다 알고 있습니다.)

updater.Raise(it => it.StateChanged += null, AutoUpdaterState.Ok); 

[주의 : 위의 내용은 이벤트를 발생시키는 Moq 코드입니다. . 그것은 바로 "메뉴가 발생 가시가 원인이됩니다 이벤트를"세부 사항을 무시하고 생각]

Assert.IsTrue(sut.checkToolStripMenuItem.Visible); 

작동 그리고 여기에 컨트롤의 관련 코드입니다 :

 checkToolStripMenuItem.Visible = true; 

문제는 ...이 줄에 중단 점을 넣고 실행하면 Visible이 false로 유지됩니다. 아마 테스트 중이므로 메뉴가 실제로 보이지 않는다는 것을 이해합니다 ... 괜찮습니다. 어떻게 테스트합니까?

답변

1

UI 코드를 테스트 할 때 WinForms와 같은 MVP 패턴 (예 : 아직 수행하지 않는 MVP)을 사용하여 올바르게 구성하면 훨씬 간단합니다.

이러한 테스트를 작성할 때 테스트 프로젝트에서 WinForms를 참조하지 않아야합니다. 보통보기에 메서드가 있지만 예제에서는 ShowPopupMenu()가됩니다. 내가 테스트 한 것은 특정 상황에서 발표자가이 메서드를 호출한다는 것입니다. 나는 특별한 방법을 테스트하지 않는다. 왜냐하면 나는 UI에 이러한 간단한 것들을 남기므로, 논리의 99 %가 발표자에있다. 팝업 메뉴를 표시하는 데는 한 줄의 코드가 필요합니다.

그러나 MVP가없는 경우 NUnitForms과 같이 WinForm을 테스트하는 데 도움이되는 라이브러리가 있습니다.

+0

MVP 아이디어가 마음에 들지만, 실제로 "발표자가 [ShowPopupMenu()] 메서드를 호출 할 것"이라는 방법을 이해하지 못합니다. 그 방법은 공동 작업자가 아니라 발표자이기도합니다 (그래서 통화를 차단할 수 없음). 나는 깃발이나 뭐 추가 했니? –

+0

흠, MVP에 대해 더 읽어야 할 것 같습니다. 저는 발표자가 view : P와 똑같지 않다는 것을 깨달았습니다. 발표자가 * view *에서 메서드를 호출한다고 말한 것입니다. 그래서, 나 자신을 위해 다시 말하면, 실제 UI 컨트롤 (뷰)을 관리하고이 발표자 만 테스트하는 UI가 아닌 의사 컴포넌트 (발표자)가 있어야한다고 옳은가요? 나는 그걸로 일할 수 있다고 생각해. –

+0

예, 뷰에서 모든 것을 분리하므로보기가 간단하여 테스트가 필요하지 않습니다. MVP의 수동보기 및 감독 컨트롤러 맛보기를 선택합니다. –

관련 문제