119

Visual Studio 2010 Beta 2를 사용하고 있습니다. [TestClass]이 하나 있는데, [TestInitialize], [TestCleanup] 및 소수의 [TestMethods]이 있습니다.Visual Studio 유닛 테스트에서 모든 테스트에 대해 TestInitialize가 실행되는 이유는 무엇입니까?

테스트 메소드가 실행될 때마다 초기화 및 정리 메소드도 실행됩니다!

[TestInitialize] & [TestCleanup]은 로컬 테스트 실행 당 한 번만 실행해야한다는 인상하에있었습니다.

맞습니까? 그렇지 않다면, 이것을하기위한 적절한 방법은 무엇입니까?

답변

241

TestInitializeTestCleanup은 각 테스트 전과 후에 실행됩니다. 이는 테스트가 연결되지 않도록하기위한 것입니다.

모든 테스트 전후에 메소드를 실행하려면 ClassInitializeClassCleanup 속성을 사용하여 관련 메소드를 꾸미십시오. 당신이 당신의 테스트를 작성할 때

이 가

다음과 같은 추가 속성을 사용할 수 있습니다 : 자동차에서

관련 정보는 Visual Studio에서 테스트 파일을 생성

[TestInitialize으로 표시됩니다

// Use ClassInitialize to run code before running the first test in the class 
[ClassInitialize()] 
public static void MyClassInitialize(TestContext testContext) { } 

// Use ClassCleanup to run code after all tests in a class have run 
[ClassCleanup()] 
public static void MyClassCleanup() { } 

// Use TestInitialize to run code before running each test 
[TestInitialize()] 
public void MyTestInitialize() { } 

// Use TestCleanup to run code after each test has run 
[TestCleanup()] 
public void MyTestCleanup() { } 
+4

을 여기 http://stackoverflow.com/a/21304674/864201 –

+2

윌 언급처럼 두 더 AssemblyInitialize 및 AssemblyCleanup이 [Ignore]로 표시된 테스트에 대해 TestInitialize가 실행됩니까? –

10

이것은 테스트 스위트의 표준 동작입니다. 각 테스트 전후에 설정 및 해체가 있습니다. 테스트는 서로 의존해서는 안된다는 철학입니다. 다른 동작을 원한다면 각 테스트 사이에 지속되는 정적 객체를 사용해야합니다.

-1

방법을() ] 속성은 단위 테스트가 실행될 환경의 측면을 준비하는 데 사용됩니다. 이것의 목적은 단위 테스트를 실행하기위한 알려진 상태를 설정하는 것입니다. [TestInitialize()] 메서드를 사용하여 테스트에서 사용할 특정 데이터 파일을 복사, 변경 또는 만들 수 있습니다.

테스트가 실행 된 후 환경을 알려진 상태로 되돌리려면 [TestCleanUp {}] 속성으로 표시된 메소드를 만듭니다. 이는 폴더에있는 파일을 삭제하거나 알려진 상태로 데이터베이스를 반환하는 것을 의미 할 수 있습니다. 예를 들어, 주문 입력 응용 프로그램에서 사용되는 메소드를 테스트 한 후 인벤토리 데이터베이스를 초기 상태로 재설정 할 수 있습니다.

자세한 내용은 참조하시기 바랍니다 : http://msdn.microsoft.com/en-us/library/ms182517%28v=vs.100%29.aspx

5

전체 예를

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using SampleClassLib; 
using System; 
using System.Windows.Forms; 

namespace TestNamespace 
{ 
    [TestClass()] 
    public sealed class DivideClassTest 
    { 
     [AssemblyInitialize()] 
     public static void AssemblyInit(TestContext context) 
     { 
      MessageBox.Show("AssemblyInit " + context.TestName); 
     } 

     [ClassInitialize()] 
     public static void ClassInit(TestContext context) 
     { 
      MessageBox.Show("ClassInit " + context.TestName); 
     } 

     [TestInitialize()] 
     public void Initialize() 
     { 
      MessageBox.Show("TestMethodInit"); 
     } 

     [TestCleanup()] 
     public void Cleanup() 
     { 
      MessageBox.Show("TestMethodCleanup"); 
     } 

     [ClassCleanup()] 
     public static void ClassCleanup() 
     { 
      MessageBox.Show("ClassCleanup"); 
     } 

     [AssemblyCleanup()] 
     public static void AssemblyCleanup() 
     { 
      MessageBox.Show("AssemblyCleanup"); 
     } 

     [TestMethod()] 
     [ExpectedException(typeof(System.DivideByZeroException))] 
     public void DivideMethodTest() 
     { 
      DivideClass.DivideMethod(0); 
     } 
    } 
}