강제로 write(2)가 0을 반환하도록 합니다.

강제로 write(2)가 0을 반환하도록 합니다.

저는 단위 테스트를 작성 중이며 write(2) 호출이 0을 반환하는 상황을 일부 코드가 어떻게 처리하는지 테스트하고 싶습니다. 항상 그렇듯이 테스트를 가능한 한 현실적으로 유지하는 것이 가장 좋습니다.

write(2)가 호출될 때 0을 반환하는 한 모든 유형의 파일 설명자를 사용하여 이를 달성할 수 있습니다. 또한 쓰기에 필요한 모든 크기의 거의 모든 데이터를 전달할 수도 있습니다.

그러나 0을 여러 번 반환한 후 다른 스레드에서 설명자의 동작을 변경할 수 있기를 원하므로 길이가 0인 데이터를 쓰는 것은 허용되지 않습니다.

파일 설명자를 이 상태로 만드는 합리적으로 이식 가능하고 안정적인 방법을 생각할 수 있는 사람이 있습니까? 가능하다면 최신 Linux를 대상으로 하는 것이 좋지만 더 광범위하게(*BSD, OS X 등) 작동하는 것이 좋습니다.

답변1

실제 입력에 영향을 미치는 것이 어려운 경우(예: 디스크 오류에 대한 반응) 일부 전역 상태에 의존하는 함수 주위에 얇은 래퍼를 만들어야 합니다. 이 경우에는 write()0 또는 의 실제 반환을 반환하기 위해 이와 같은 래퍼를 넣을 것입니다 write().

래퍼의 오버헤드가 너무 큰 경우 일부 래퍼를 사용하여 프로덕션 시스템에서 래퍼 코드를 완전히 생략할 수 있지만 적어도 #define단위 중에 올바른 변경을 수행하는 데 필요한 전역 상태를 설정하여 맨 위의 레이어를 테스트 할 수 있습니다. 테스트 반응.write()

관련 정보