상태 documentation : 함수가 실패EnumProcesses()가 실패하는 원인은 무엇입니까?
경우, 반환 값은 0이다. 확장 오류 정보를 얻으려면 GetLastError를 호출하십시오.
그러나 함수가 실패 할 수있는 방법에 대한 예는 제공하지 않습니다. 단위 테스트에 대한
나는 확실하게 EnumProcesses()
실패하게하는 상황을 만들어야합니다. 당신이 그것을 유효하지 않은 매개 변수를 전달하는 경우
상태 documentation : 함수가 실패EnumProcesses()가 실패하는 원인은 무엇입니까?
경우, 반환 값은 0이다. 확장 오류 정보를 얻으려면 GetLastError를 호출하십시오.
그러나 함수가 실패 할 수있는 방법에 대한 예는 제공하지 않습니다. 단위 테스트에 대한
나는 확실하게 EnumProcesses()
실패하게하는 상황을 만들어야합니다. 당신이 그것을 유효하지 않은 매개 변수를 전달하는 경우
, 그것은 실패 할 수 있습니다. 이 경우에 그것은 당신이 말하는 크기보다 작은 PID 배열 또는 수신 된 카운트를위한 NULL 포인터를 의미합니다. 함수가 SEH를 사용하여이를 막거나 충돌을 일으키는 지 여부를 알지 못하기 때문에이 작업을 약간 위험합니다.
는 내부적으로이 함수는 프로세스 정보를 얻을 수 NTDLL로 호출하기 전에 일부 메모리를 할당 할 수 있고 사용할 수있는 충분한 메모리가없는 경우이 함수가 실패 할 수 있습니다.
당신은/멀리 메모리 추상에 도우미 함수에 EnumProcesses를 호출 어쨌든 세부 사항을 재 시도하고 필요할 때 실패를 시뮬레이션 할 수있는 좋은 장소가 될 것이라고한다. 당신이 절대적으로 함수 자체는 단위 테스트를 위해
나는 EnumProcesses가 환경 조건을 변경하여 프로세스를 실패하게 만들 수있는 프로세스 권한이나 비슷한 것을 단순히 제거함으로써이 작업을 수행 할 수 있기를 희망했다. 받은 카운트에 대해'NULL' 함수가 실패하지만, 당신이 썼을 때, 충돌 할 수도 있습니다. (현재는 아니지만 미래의 Windows 버전 일 수도 있습니다). "시뮬레이션"실패는 릴리스 코드 (일부 #ifdef @HansPassant가 제안 됨)와 비교할 때 테스트를위한 다른 코드 경로가 필요하므로이를 피하고 싶습니다. – zett42
하지만 EnumProcesses를 래핑하는 도우미 함수가 있어야하므로 주 코드 IMHO에서 직접 다시 시도하는 등의 작업을하지 않아도됩니다. – Anders
예. 있습니다. 하지만 그 래퍼 내에서 여전히 # ifdef (다른 코드 경로) 또는 실패를 시뮬레이트하기위한 매개 변수를 추가해야합니까? zett42 @ – zett42
... 마이크로 소프트 본론 또는 IAT 후킹 같은 것을 함께 후크 수 실패해야하는 경우
, 당신은 아마 프로세스를 얻는 방법을 스텁의 방법이 있어야합니다. – chris
관리 코드의 경우 시스템 서비스를 대체하고 재현 가능한 동작을 제공하기 위해 Moles/Pex (현재 Microsoft Fakes)가있었습니다. 나는 네이티브 코드에 대한 그러한 프레임 워크에 대해서는 잘 알지 못하지만, 그것들의 가용성을 조사하는데 시간을 투자 할 것입니다. – IInspectable
모든 winapi 함수가 실패 할 수 있습니다. 예외 사양이 없습니다. 거의 아무것도 좋지 않으며, EnumProcesses에 대해서는 분명히 없을 것이며, 앱이 예외없이 성공적으로 종료되는지 여부를 테스트하는 것만으로도 충분합니다. –