2008-09-10 9 views
5

Windows Impersonation API를 사용하는 코드 조각을 청결한 작은 도우미 클래스로 포장하고 평소와 같이 먼저 테스트 우선 테스트 방법을 찾고 있습니다. 그러나 WindowsIdentity는 관리되는 클래스이지만 다른 사용자로 실제로 로그인하는 데 필요한 LogonUser 호출은 advapi32.dll에서 관리되지 않는 함수입니다.P/Invoke 호출을하는 클래스를 단위 테스트 할 수 있습니까?

필자는 도우미 클래스에 대한 인터페이스를 도입하여 구현에서 P/Invoke 호출을 사용하지 않고 숨길 수 있다고 생각하지만이 구현을 테스트하는 것은 여전히 ​​문제가됩니다. 그리고 실제로 사용자가 실제로 시스템에 존재해야한다는 것을 감안할 때 테스트에서 가장을 수행하는 것이 약간 문제가 될 수 있다고 상상할 수 있습니다.

답변

10

지침 : 작성하지 않은 코드는 테스트하지 마십시오.
WinAPI 구현이 작동하지 않는다고 생각하면 안됩니다 (대부분 예상대로 작동 함). 귀하의 코드가 올바른 WinAPI 호출을하는 경우 '배선'을 테스트해야합니다. 이 경우 필요한 것은 인터페이스를 조롱하고 모의 틀에서 올바른 매개 변수로 통화했는지 알려주는 것입니다. 그렇다면 끝났습니다.

  • IWinAPIFacade (관련 WinAPI 메서드 포함)를 만들고 CWinAPIFacade를 구현합니다.
  • IWinAPIFacade의 모의에 꽂는 테스트 쓰기
  • 가 CWinAPIFacade 구현 (정상적인 기능에) 적절한 호출
  • 가 CWinAPIFacade 생성되도록 테스트를 작성 만든 기본으로 연결되어 있는지를 확인하는 플랫폼 호출 호출을 블라인드 위임하기 만하면이 계층을 자동 테스트 할 필요가 없습니다. 그냥 수동으로 확인하십시오. 바라기를 바꿔도이 부분은 자주 바뀌지 않을 것이고 아무것도 망가지지 않을 것입니다. 나중에 을 찾으면을 수행하고 몇 가지 테스트로 바리케이드 처리합니다.
+0

이것은 제가 취한 접근법이며, 나는 그것에 만족합니다. 그러나, 나는 여전히 Win32 API를 호출 할 때 나의 구체적인 클래스가 "올바른 일을하고있다"는 것을 확인하는 방법이 있었으면 좋겠다. :) – Rytmis

+1

있습니다. 이를 통합 테스트라고합니다. – nathanchere

+0

@nathanchere - + 1ed. 시스템 수준 테스트 (수동/수락)의 일부로 적용되는지 확인하십시오. 따라서 'CWinAPIFacade가 고장났습니다.'라는 엣지 경우조차도 일찌기 잡히게됩니다 (물론 자동화는 이상적입니다). – Gishu

0

나는 당신을 따라갈 지 모르겠다. PInvoke를 직접 테스트하지 않으려 고 (랩퍼 클래스를 작성하지 않았으므로) 래퍼 클래스가 예상대로 작동하는지 테스트하고 싶습니까?

그래서 래퍼 클래스에 인터페이스를 만들고 테스트 할 수 있습니까?

사용자를 설정하는 등의 측면에서 볼 때, 나는 당신이 물어야하는 총알이 될 것이라고 생각합니다. 당신이 단순히 확인하고 인터페이스가 존재하기 때문에 래퍼 PInvoke 호출을 모방하는 것이 이상하게 보일 것입니다.

+0

Gishu가 나를 이겼다! : D –

+0

Sorryyyyyyy (댓글을 달기 위해 10자를 만들어야했습니다. – Gishu