수업에 대한 일부 단위 테스트를 진행 중입니다. 이 클래스는 파일로 작업하고 있습니다. 여러 단위 테스트를 구현하고 자체적으로 실행했지만 모두 동시에 실행되도록했을 때 테스트가 실패하는 것을 발견했습니다. 그래서 VisualStudio가 단위 테스트를 병렬로 실행한다는 것을 알아 냈습니다.
각 테스트에 대한 파일을 준비하는 동안 문제가 발생하지 않도록 스레드 잠금을 구현하려고했습니다. 그러나 지금까지 이것은 작동하지 않습니다.
다음으로 내 문제를 설명하는 간단한 예를 제공했습니다.
[TestClass]
public class UnitTest1
{
private static object lockObject = new object();
private void DoSomething()
{
File.Create(@"D:\test.txt");
for (int i = 0; i < 100000; i++)
{
}
File.Delete(@"D:\test.txt");
}
[TestMethod]
public void TestMethod1()
{
lock (lockObject)
{
DoSomething();
}
}
[TestMethod]
public void TestMethod2()
{
lock (lockObject)
{
DoSomething();
}
}
}
다른 프로세스에서 이미 사용 중이기 때문에 각 프로세스가 파일에 액세스 할 수 없기 때문에 테스트가 실패합니다.
내가 뭘 잘못했는지 아는 사람이 있습니까?
에서 FileStream
반환 된 개체를 처리하지 않기 때문에 파일 자체가 잠겨 있습니다. 이는 File.Create
호출을 시도 할 때 파일이 여전히 열려 있음을 의미합니다 File.Delete
.
가능한 IDisposable
한 using {}
블록에 일회용 개체 (를 구현하는 모든 것 ) 를 포장 하여 리소스가 적절하게 처리되도록하는 것이 가장 좋습니다 . 귀하의 경우 파일을 닫으면 문제가 해결됩니다.
따라서 코드를 다음과 같이 변경하면 즉각적인 문제가 해결됩니다.
private void DoSomething()
{
using (var file = File.Create(@"D:\test.txt"))
{
for (int i = 0; i < 100000; i++)
{
}
}
File.Delete(@"D:\test.txt");
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다