2010-04-01 3 views
1

나는 VS 2008과 함께 C# .NET에서 합리적으로 간단한 XML serializer/deserializer (로그 파일 파서) 응용 프로그램을 구현하고 있습니다. 코드의 다양한 부분에 대해 약 50 개의 단위 테스트가 있습니다 (대부분 다양한 직렬화 연산), 일부는 파일 I/O를 처리 할 때 주로 무작위로 실패하는 것으로 보입니다.VS2008 : 단위 테스트에서 임의로 파일 생성이 실패합니까?

테스트 구성 방법은 테스트 설치 방법에서 특정 미리 지정된 위치에 빈 파일을 새로 만들고 스트림을 닫는 것입니다. 그런 다음 파일에 대한 몇 가지 기본 테스트를 수행합니다 (정확히 테스트중인 내용에 따라 다릅니다). 정리 메소드에서 파일을 다시 h 제합니다.

내 단위 테스트에서 많은 부분 (대개 30 개 이상 실행되지만 실행 횟수가 달라짐)이 initialize 메소드에서 실패합니다. 생성하려는 파일에 액세스 할 수 없다고 주장합니다. 정확한 원인을 파악할 수는 없습니다. 한 번의 작동을 테스트하는 테스트가 실패하기 때문에 정확한 원인을 파악할 수는 없습니다. 그들은 모두 개별적으로 실행할 때 성공합니다.

여기에 문제가 있습니까? 여러 유닛 테스트에서이 파일에 액세스 할 수없는 이유는 무엇입니까?

[TestInitialize()] 
public void LogFileTestInitialize() 
{ 
    this.testFolder = 
     System.Environment.GetFolderPath(
      System.Environment.SpecialFolder.LocalApplicationData 
     ); 
    this.testPath = this.testFolder + "\\empty.lfp"; 
    System.IO.File.Create(this.testPath).Close(); 
} 

[TestMethod()] 
public void LogFileConstructorTest() 
{ 
    string filePath = this.testPath; 
    LogFile target = new LogFile(filePath); 
    Assert.AreNotEqual(null, target); 
    Assert.AreEqual(this.testPath, target.filePath); 
    Assert.AreEqual("empty.lfp", target.fileName); 
    Assert.AreEqual(this.testFolder + "\\empty.lfp.lfpdat", target.metaPath); 
} 

[TestCleanup()] 
public void LogFileTestCleanup() 
{ 
    System.IO.File.Delete(this.testPath); 
}

그리고 LogFile() 생성자 :

public LogFile(String filePath) 
{ 
    this.entries = new List<Entry>(); 
    this.filePath = filePath; 
    this.metaPath = filePath + ".lfpdat"; 
    this.fileName = filePath.Substring(filePath.LastIndexOf("\\") + 1); 
}

정확한 오류 메시지

초기화 방법 시간의 일부 실패 단위 테스트

관련 방법 LogFileParserTester.LogFileTest.LogFileTestInitialize 예외가 발생했습니다. 가 다른 프로세스에서 사용하고 있기 때문에 '의 AppData \ 로컬 \의 empty.lfp \ < 사용자 > \ \ 사용자 C' System.IO.IOException : System.IO.IOException 과정 파일 에 액세스 할 수 없습니다 ..

답변

2

파일 시스템 액세스를 조롱해야하며 실제로 단위 테스트에서 파일을 읽거나 쓰지 않아야합니다.

0

일부 테스트와 같은 소리가 동시에 실행됩니다. 개별 테스트가 파일에 기록합니까 아니면 그냥 읽습니까? 읽기 전용이라면 동시에 실행할 수 있도록 사소한 변경을 할 수 있습니다. 자세한 내용은?

+0

당신이 말해 - VS2008 테스트를 동시에 실행합니까? 나는 그것에 대해 생각했지만 Google은 VS2010만이 여러 동시 테스트를 지원함을 나타 냈습니다. – Tim

관련 문제