문제

Windows Impersonation API를 사용하는 코드 조각을 깔끔한 작은 도우미 클래스로 래핑하고 싶고 평소와 같이 테스트 우선 방법을 찾고 있습니다.그러나 WindowsIdentity는 관리되는 클래스이지만 실제로 다른 사용자로 로그인을 수행하는 데 필요한 LogonUser 호출은 advapi32.dll의 관리되지 않는 함수입니다.

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

도움이 되었습니까?

해결책

지침:작성하지 않은 코드를 테스트하지 마세요.
WinAPI 구현이 작동하지 않는 것에 대해 걱정할 필요가 없습니다(대부분 예상대로 작동할 것입니다).귀하의 관심사는 '배선'을 테스트하는 것입니다.코드가 올바른 WinAPI 호출을 수행하는지 여부.이 경우 필요한 것은 인터페이스를 모의하고 모의 프레임워크가 올바른 매개변수를 사용하여 호출이 이루어졌는지 알려주는 것입니다.그렇다면 완료된 것입니다.

  • IWinAPIFacade(관련 WinAPI 메서드 포함)를 만들고 CWinAPIFacade를 구현합니다.
  • IWinAPIFacade의 모형을 연결하고 적절한 호출이 이루어졌는지 확인하는 테스트를 작성하세요.
  • CWinAPIFacade가 생성되어 기본값으로 연결되었는지 확인하는 테스트를 작성합니다(정상 작동 시).
  • 플랫폼 호출 호출에 대해 단순히 블라인드 위임하는 CWinAPIFacade를 구현합니다. 이 레이어를 자동 테스트할 필요가 없습니다.수동으로 확인을 하시면 됩니다.이것이 자주 변경되지 않고 아무 것도 깨지지 않기를 바랍니다.그걸 발견했다면 하다 앞으로는 몇 가지 테스트를 통해 바리케이드를 쳐보세요.

다른 팁

따라갈지는 모르겠지만..PInvoke를 직접 테스트하고 싶지 않기 때문에(직접 작성하지 않음) 래퍼 클래스가 예상대로 작동하는지 테스트하고 싶습니까?

그렇다면 래퍼 클래스에서 인터페이스를 생성하고 이에 대해 테스트해 볼까요?

사용자 설정 등을 해야 한다는 측면에서 보면 꼭 필요한 총알이 될 것 같습니다.래퍼 PInvoke 호출을 조롱하는 것은 이상해 보일 것입니다. 단순히 확인만 하면 인터페이스가 존재하기 때문입니다. :)

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