내 목표는 ClassCleanup 특성을 사용하여 플래시백 복구를 사용하여 많은 단위 테스트를 실행 한 후 Oracle 데이터베이스를 이전 상태로 복원하는 것입니다.Visual Studio : 일괄 파일을 실행할 때 ClassCleanup 시간 초과 테스트
데이터베이스를 올바르게 복원하기 위해 배치 파일 + SQL을 작성했습니다. 이것은 내 명령 프롬프트에서 여러 번 문제없이 테스트되었습니다
보통 테스트 실행 구성 내에 정리 스크립트로 저장 하겠지만 데이터베이스를 플래쉬 백하는 시간을 포함해야합니다 (ClassInitialize로 설정)
try
{
ProcessStartInfo startInfo = new ProcessStartInfo(@"SomeProjectDirectory\flashback.bat");
startInfo.CreateNoWindow = false;
startInfo.WindowStyle = ProcessWindowStyle.Normal;
startInfo.ErrorDialog = true;
startInfo.Arguments = Arguments;
startInfo.UseShellExecute = true;
Process batchExecute = new Process();
batchExecute.StartInfo = startInfo;
batchExecute.Start();
batchExecute.WaitForExit();
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine(e.ToString());
}
배치 파일
잘 실행되지만 문제는이완료되기 전에 밖으로 ClassCleanup 방법 시간 그것은() 모든 중단 점을 공격하거나 WaitForExit 후 예외를 캐치하지 않았던 것 같다. 프로세스를 완료하는 동안 명령 프롬프트 창을 끝내기 만하면 오류 메시지없이 모든 테스트가 성공했음을 알 수 있습니다.
많은 수의 ClassCleanup 메서드에 Timeout 특성을 추가하려고했지만 어느 쪽도 도움이되지 않습니다. 내가 확실히 확신 할 수있는이 속성은 클래스 정리가 아닌 유닛 테스트에만 적용 가능합니다.
프로세스를 TestCleanup 메소드로 옮겼습니다. 문제없이 작동했습니다. 이 과정은 테스트에서도 잘 돌아갔다. ClassCleanup에서만 시간 제한이있는 것 같습니다 & AssemblyCleanup 메서드
우리는 테스트를 실행할 때마다 항상 같은 지점에서 벗어나기 때문에 시간 초과라는 인상을 받고 있습니다. 그러나 스크립트에 단계를 추가하거나 제거하면 이전보다 빠르거나 더 빠를 것입니다.
ProcessStartInfo & Process를 전용 멤버 변수로 설정하면 GC가 정리되지 않아 완벽하게 작동합니다. 고마워. –
고마워. –