1

하나의 Test 메소드에서 객체를 만들고 코드를 다시 작성하는 대신 다른 [TestMethod]의 나머지 부분에서 만든 객체를 사용하고 싶습니다. 몹시 떠들어 대다. 클래스 내부에 전역 변수를 선언하고 생성 테스트 메서드에서 할당하려고했습니다. 그러나 컨트롤이 다음 [TestMthod]로 갈 때 전역 변수의 값은 null이됩니다.하나의 [TestMethod]에서 C# 단위 테스트 프레임 워크의 다른 사람에게 정보 전달하기

namespace ABC 
{ 
    class UnitTest 
    { 
     [TestMethod] 
     public void CreateObject() 
     { 
      var createdObject = \\ logic to create object; 
     } 

     [TestMethod] 
     public void Display() 
     { 
      //Here i want to use the created object instead of using object. 
     } 
    } 
} 

어떻게하면됩니까?

+1

TestMethods의 실행은 결정적이지 않으므로 순서를 제어 할 수 없습니다. TestInitialize 또는 setup-help 메소드가 앞으로 나아갈 길입니다. 또한 독립적 인 테스트가 가장 안정적이고 쉬운 방법이기 때문에 병렬로 실행합니다. – Jocke

+0

@Jocke 실제로 테스트 메소드를 오름차순으로 명명하여 모든 테스트 메소드를 자동화하는 아이디어를 가지고 있으므로 순서대로 실행합니다. . 그럼이게 가능하지 않니? – user1168608

+0

@ user1168608 가능한지 여부는 단위 테스트 러너의 구현 세부 사항입니다. 그럼에도 불구하고 단위 테스트는 여러 가지 이유로 성능이 뛰어납니다 (병렬 처리가 가능함). 유지 관리가 더 좋습니다. –

답변

3

단위 테스트는 완전히 원자 적이어야합니다. 누군가가 직접 Display 단위 테스트를 실행하거나 병렬로 실행하거나 다른 순서로 실행해야 할 수도 있습니다. 실제로 수행하려는 작업은 [TestInitialize] 메서드로 CreateObject 메서드를 표시하는 것입니다. CreateObject은 단위 테스트 방법이 아니므로 테스트 설정 방법입니다.

참고로 테스트 설정 속성의 전체 목록은 here으로되어 있습니다. 객체 작성 방법에 대한 구체적인 내용에 따라 ClassInitialize을 사용할 수도 있습니다.

namespace ABC 
{ 
    class UnitTest 
    { 
     private object mySpecialObject; 

     [TestInitialize] 
     public void CreateObject() 
     { 
      mySpecialObject = CreateSpecialObject(); 
     } 

     [TestMethod] 
     public void Display() 
     { 
      //Here i want to use the created object instead of using object. 
      DoStuff(mySpecialObject); 
     } 
    } 
}