Visual Studio에서 제공해주는 유닛 테스트 기능과 .NET의 async 기능을 붙여볼 때 async void 메소드의 유닛 테스트 사용은 보통 권장하지 않는다. async void의 의미는 “너는 저질러라, 나는 간다.” 라서 그렇다. 보통 결과값의 테스트가 중요한 유닛테스트에서 void 리턴형은 자체로도 곤란하지만 내부에서 예외를 던질 경우 좀 더 곤란하다. 다름아닌 유닛 테스트 프로세스의 크래시 ㅡ_ㅡ

다음은 Visual Studio 2015 Community 버전에서 발생하는 에러 메시지인데,

 

The active Test Run was aborted because the execution process exited unexpectedly. To investigate further, enable local crash dumps either at the machine level or for process te.processhost.managed.exe. Go to more details: http://go.microsoft.com/fwlink/?linkid=232477

 

async void 리턴형인 메소드 내부에서 예외를 던질 경우 받아서 처리할 타이밍을 비롯하여 아기자기한 문제들이 엮여서 발생하는 것으로 추정된다.

당연히 async Task / await 를 사용하는 식으로 해결 가능하다.

하지만 async void 또한 종국에는 어떤 대리자가 도맡아서 사용하는 경우를 막을 수도 없거니와 그런 녀석들이 테스트에서 배제되는 경우도 바람직하지 않으므로 대안은 필요해보인다. (아니 것보다 일단 저건 vs 버그라고 생각된다)

Posted by OOJJRS
,