2011-05-05 3 views
4

는 다음 테스트 클래스 고려해이 시험 그들이에게 패스를 실행하지만, 순서에 따라단위 테스트에서 오래된 DeploymentItem을 제거하는 방법은 무엇입니까?

[TestClass] 
public class ExampleTests 
{ 
    [TestMethod] 
    public void FileDoesNotExists() 
    { 
     Assert.IsFalse(System.IO.File.Exists("testfile.txt")); 
    } 

    [TestMethod] 
    [DeploymentItem("testfile.txt")] 
    public void FileExists() 
    { 
     Assert.IsTrue(System.IO.File.Exists("testfile.txt")); 
    } 

} 

을 그들이 현실 세계를 정의되어 있는지가 순서대로 실행된다는 보장이 없기 때문에 행동 비 결정적입니다 ... 분명히 나쁘다.

나는 TestCleanupAttribute를 둘러 보았지만 두 가지 테스트를 통과시키는 신뢰할만한 방법을 찾을 수 없었지만 이렇게하기 쉬운 방법이 있어야하는 것처럼 보였다. 그런 방법이 존재합니까?

업데이트 : 테스트 프레임 워크에서는 DeploymentItem이 배포되면 변경되지 않으므로 각 항목을 한 번만 배포하기 때문에 불가능한 것처럼 보입니다. 단기간에 필자는 테스트 할 코드를 더 이상이 동작이 필요하지 않게 변경했습니다. 장기적으로는이 가정을하지 않는 특성을 구현할 가능성이 큽니다.

답변

2

DeploymentItem은 실제로 클라이언트의 컴퓨터에 배포 할 파일이므로 을 배포 한 후에는을 제거하지 않아도됩니다.

단위 테스트를위한 '샌드 박스'디렉토리를 만들고 파일 복사/액세스/삭제 작업을 수행하려면 File.Delete과 같은 일반적인 .NET 파일 시스템 방법을 사용해야합니다.

+0

필자가 테스트하려고 시도했던 동작은 (필수이지만 꼭 필요한 것은 아니지만) 구성 파일이 누락 된 경우의 동작 이었지만이 동작은 동일한 항목의 서로 다른 버전을 여러 테스트에 배포해야하는 경우에도 문제가됩니다 . 샌드 박스 디렉토리는 각 테스트에서 필요한 보일러 플레이트 코드의 양을 증가시키기 때문에 실행 가능하지만 이상적이지는 않습니다. – Yaur

+0

나는 이러한 반복 파일 액세스 코드를 정적 함수가있는 정적 클래스로 언로드합니다. 나는 mstest buth로이 문제를 해결할 방법을 찾지 못했습니다. xUnit.net은 흥미로운 인터페이스를 가지고있는 것 같습니다. 즉 IUseFixture 에서 클래스에 대한 DeploymentFixture 자신을 정의하고 각 테스트 전에 적절한 메소드를 실행합니다. –

관련 문제