2009-03-12 5 views
25

어셈블리의 각 테스트 전에 특정 메서드를 실행할 수 있습니까?MsTest - 어셈블리의 각 테스트 전 메서드 실행

TestInitialize 속성을 알고 있지만이 속성에는 "클래스 범위"가 있습니다. Test 클래스에서 정의 된 경우이 클래스의 각 테스트 전에 실행됩니다.

전체 어셈블리에 정의 된 각 테스트 전에 실행될 메서드를 정의하고 싶습니다.

답변

11

에서 확인할 수 있습니다.이 기능은 다른 테스트 프레임 워크 (예 : MbUnit)처럼 MsTest에서 즉시 사용할 수 있는지 확실하지 않습니다.

MsTest를 사용해야하는 경우 [TestInitialize] 특성을 사용하여 추상 클래스 TestBase를 정의하여이 문제를 해결해야하며이 동작이 필요한 모든 테스트는이 기본 클래스에서 파생됩니다. 귀하의 경우 귀하의 어셈블리에있는 모든 테스트 클래스는이베이스에서 상속해야합니다 ...

아마도 다른 해결책이 있습니다. 맞춤 테스트 속성을 만들 수 있습니다. 그러나 아직 시도하지 않았습니다 ... :)

0

나는 ClassInitialize 속성을 찾고 있다고 생각합니다.

+2

ClassInitialize 모든 클래스에 대해 한 번 실행됩니다. 클래스에 5 개의 테스트가 있으면 ClassInitialize 메서드가 한 번 실행됩니다. – brzozow

+2

예, 아마도 TestInitialize를 의미했을 것입니다. –

1

각 테스트의 클래스를 인스턴스화하는 MSTest가 아닙니까? 그것은 그것을 이해하는 것이 었습니다. 이 경우 생성자에서 호출 한 것은 초기화 코드 (정의에 따라 테스트 당)입니다.

편집 : 작동하지 않는 경우 (MSTest가 개별 테스트 메서드 실행이 분리되어 있는지 확인해야하므로 필자는 여전히 생각해야 함) TestInitialize이 특성입니다. 그런데 가장 좋은 단위 테스트 비교는 Link on Codeplex

+0

모든 테스트 클래스에서 모든 테스트 전에 실행될 코드를 작성하고 싶습니다. 따라서 솔루션은 하나의 테스트 클래스에서만 작동합니다. – brzozow

+0

아니요, 사실이 아닙니다. MSTest 하네스가 테스트 당 새로운 테스트 클래스 인스턴스를 인스턴스화하는 것이 사실이라면 (이는 테스트 격리 목적으로는 사실이라고 생각합니다), 생성자의 코드는 각 테스트 메서드 전에 실행됩니다. –

+0

당신이 쓰는 것이 사실이지만 내 문제를 해결하지 못합니다. 각 테스트 전에 정적 속성을 재설정하고 싶습니다 (잘못된 디자인 임). 나는 단위 테스트와 400 클래스 있습니다. 모든 클래스에 해당 코드를 작성하고 싶지 않습니다. – brzozow

52

[TestInitialize()]이 필요합니다.

private string dir; 

[TestInitialize()] 
public void Startup() 
{ 
    dir = Path.GetTempFileName(); 
    MakeDirectory(ssDir); 
} 

[TestCleanup()] 
public void Cleanup() 
{ 
    ss = null; 
    Directory.SetCurrentDirectory(Path.GetTempPath()); 

    setAttributesNormal(new DirectoryInfo(ssDir)); 
    Directory.Delete(ssDir, true); 
} 


[TestMethod] 
public void TestAddFile() 
{ 
    File.WriteAllText(dir + "a", "This is a file"); 
    ss.AddFile("a"); 
    ... 
} 

[TestMethod] 
public void TestAddFolder() 
{ 
    ss.CreateFolder("a/"); 
    ... 
} 

이렇게하면 각 테스트마다 새로운 임의의 임시 경로가 제공되고 완료되면 삭제됩니다. 디버그에서 실행하고 각 테스트 케이스에 대한 dir 변수를 보면이를 확인할 수 있습니다.

+3

StartUp 메소드는이 클래스에서 test를 실행하기 전에 만 호출됩니다. 어셈블리의 모든 클래스에서 모든 테스트를 수행하기 전에 메서드를 실행하려고합니다. – brzozow

+1

FTQ "각 테스트 전에 특정 메서드를 실행할 수 있습니까?" 나는 대답했다. 만약 당신이 의미하는 것은 "모든 테스트를하기 전에 한 번 실행되는 메쏘드"라면, 당신의 답은 여기에 있습니다 : http://stackoverflow.com/questions/639326/mstest-executing-method-before-each-test/639339#639339 – FryGuy

+1

대답은 Thx. 하지만 어셈블리에서 각 테스트 전에 메서드를 실행하고 싶습니다. 어쩌면 제 질문이 충분히 명확하지 않을 수도 있습니다. – brzozow

관련 문제