2009-08-12 10 views
1

IntervalZero's RTX product의 기본 호출을 래핑하기 위해 일부 관리 코드를 작성하고 있습니다. RTX는 기본적으로 Windows에서 커널 프록시를 설정하여 실시간 코딩을 가능하게합니다. 여기서 중요한 점은 DllMain이 DLL_THREAD_ATTACH와 함께 호출 될 때 RTX가 프록시를 생성한다는 것입니다 (그리고 DLL_THREAD_DETACH에서이를 깨뜨림). 해당 프록시가 생성되지 않았고 라이브러리에 전화를 걸면 즉시 BSOD이 표시됩니다.ThreadPool을 사용하여 mstest *를 실행하지 않고

글쎄, 나는 mstest.exe 단위 테스트를 실행할 때 ThreadPool 클래스를 사용하여 큐를 대기열에 올리는 것을 99.9 % 확신합니다 (이 동작을 설명하는 유일한 것임). RTX 라이브러리가로드되기 전에 스레드가 이미 생성 되었기 때문에 DllMain은 호출되지 않으며 RTX 서브 시스템은 그 존재를 인식하지 못하므로 유닛 테스트가 라이브러리로 호출하려고하면 실행 취소됩니다. .

정말 합리적이고 자동화 가능한 테스트 커버리지를 얻을 수 있도록이 물건에 대한 단위 테스트를 실행할 수 있어야합니다. 각 테스트마다 런타임에 새 스레드를 생성하도록 mstest에 지시하는 방법이 있습니까? 일반적으로 그렇게하는 것이 일반적으로 느리지 만 블루 스크린 이후에 다시 돌아 오는 것보다 더 빠를 것입니다.

답변

0

음,이 같은 질문으로 인해 동의율이 낮아서 답변을 드리겠습니다. mstest가 다르게 동작하는 것 같지 않습니다 (즉, 테스트 당 단일 스레드 사용). 상상할 수있는 모든 것을 시도했습니다. 이를 해결하기 위해 리플렉션을 사용하여 테스트를로드하고 실행하는 간단한 테스트 러너 앱을 작성했습니다. 이렇게하면 mstest 구문을 유지할 수 있습니다 (기능은 훨씬 적음).

장기간에 걸쳐 RTX API를 사용하려면보다 친절하게 마사지해야합니다. 저는 OEM과 협력하여 다음 릴리스에서이를 얻으려고 노력하고 있습니다.

0

nUnit과 같은 MSTest와 다른 프레임 워크를 사용하여 문제가 재현되는지 확인해 보셨습니까?

+0

아직 없습니다. 우리가 이미 다른 모든 작업에 사용하고있는 도구 세트에 머물기를 바라고 있습니다. – ctacke