2012-12-21 2 views
1

나는이 문제에 대해 봤지만 대답을 찾을 수 없었다.병렬 대신 순차적으로 실행할 테스트 사례

테스트 실행이 병렬로 실행되어 서로가 실패하는 것처럼 보입니다. 개별적으로 실행하면 모두 통과합니다. 나는 테스트에 스레드를 추가하고 잠을 자려고했지만 운이 없었습니다.

이러한 테스트를 차례대로 실행할 수있는 방법이 있습니까?

내 환경 :

비주얼 스튜디오 2010 ReSharper에서 제트 두뇌 6.1

+0

문제의 근본 원인이 될 수있는 한 테스트에서 다른 테스트로 지속되는 어딘가에 정적 데이터가 있다는 소리를 들려줍니다. 피터 리치 (Peter Ritchie)는 정적 의존성이 다른 테스트에 영향을주지 않도록 코드/테스트를 다시 작성해야한다고 제안했습니다. –

+1

나는 나의 첫 번째 테스트에서이 실수를 범했습니다. 나는 Test2에서 그때 거기에있을 것이라고 기대하는 Test1의 DB에 값을 설정할 것이다. 그것은 재앙을위한 처방이었다. –

+0

가능한 복제본 \ [ReSharper가 어셈블리의 단위 테스트를 병렬로 실행하지 못하도록하는 방법이 있습니까?] (http://stackoverflow.com/questions/10017156/is-there-a-way-to-prevent) 어셈블리에서 실행 중 - 단위 테스트 - 인 - p) – t0mm13b

답변

11

난 당신이 결정적 단위 테스트를 제안합니다. 그것은 그들이 실행되는 순서 나 다른 테스트가 실행되기 전후에 의존하지 않는다는 것입니다. 이 작업을 수행하지 않으면 실패의 처방입니다. 대부분의 테스트 주자는 테스트 방법이 완전히 독립적이라는 사실을 기반으로합니다.

이 사실은 테스트 클래스의 메소드가 호출되는 방식에서 본질적으로 명백합니다. 예 : MS Test를 사용하면 어셈블리, 클래스 및 테스트 초기화 메서드를 가질 수 있습니다. 이 모든 것은 호출되는 각 TestMethod에 대해 호출됩니다. 예를 들어, 다음 클래스 :는 TestMethod 자체 테스트로 간주되는 "테스트"클래스가 있지만

[TestClass()] 
    public class DivideClassTest 
    { 
     [AssemblyInitialize()] 
     public static void AssemblyInit(TestContext context) 
     { 
     Console.WriteLine("Assembly Init"); 
     } 

     [ClassInitialize()] 
     public static void ClassInit(TestContext context) 
     { 
     Console.WriteLine("ClassInit"); 
     } 

     [TestInitialize()] 
     public void Initialize() 
     { 
     Console.WriteLine("TestMethodInit"); 
     } 

     [TestCleanup()] 
     public void Cleanup() 
     { 
     Console.WriteLine("TestMethodCleanup"); 
     } 

     [ClassCleanup()] 
     public static void ClassCleanup() 
     { 
     Console.WriteLine("ClassCleanup"); 
     } 

     [AssemblyCleanup()] 
     public static void AssemblyCleanup() 
     { 
     Console.WriteLine("AssemblyCleanup"); 
     } 

     [TestMethod()] 
     public void Test1() 
     { 
      Console.WriteLine("Test1"); 
     } 
     [TestMethod()] 
     public void Test2() 
     { 
      Console.WriteLine("Test2"); 
     } 
    } 

당신은

Assembly Init 
ClassInit 
TestMethodInit 
Test1 
TestMethodCleanup 
TestMethodInit 
Test2 
TestMethodCleanup 
ClassCleanup 
AssemblyCleanup 

같은 출력을 볼 수 있습니다. "테스트"클래스는 효과적으로 많은 테스트를 수행 할 수 있습니다.

관련 문제