development

Visual Studio 단위 테스트의 모든 테스트에 대해 TestInitialize가 시작되는 이유는 무엇입니까?

big-blog 2020. 6. 15. 07:49
반응형

Visual Studio 단위 테스트의 모든 테스트에 대해 TestInitialize가 시작되는 이유는 무엇입니까?


나는 하나있어 비주얼 스튜디오 2010 베타 2를 사용하고 [TestClass]A가 들어있는 [TestInitialize], [TestCleanup]그리고 몇 가지 [TestMethods].

테스트 방법을 실행할 때마다 초기화 및 정리 방법도 함께 실행됩니다!

로컬 테스트 실행마다 [TestInitialize]& [TestCleanup]가 한 번만 실행되어야한다는 인상을 받았습니다 .

그 맞습니까? 그렇지 않은 경우이를 수행하는 올바른 방법은 무엇입니까?


TestInitialize그리고 TestCleanup전에 각 테스트 후,이 더 테스트가 결합되지 않도록하는 것입니다 실행된다.

모든 테스트 전후에 메소드를 실행하려면 ClassInitializeClassCleanup속성을 사용하여 관련 메소드를 장식하십시오 .

Visual Studio에서 자동 생성 된 테스트 파일의 관련 정보 :

테스트를 작성할 때 다음과 같은 추가 속성을 사용할 수 있습니다.

// 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() { }

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


Microsoft 문서 에서 가져온 전체 예 :

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);
        }
    }
}

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

Create methods that are marked with [TestCleanUp{}] attribute to return the environment to a known state after a test has run. This might mean the deletion of files in folders or the return of a database to a known state. An example of this is to reset an inventory database to an initial state after testing a method that is used in an order-entry application.

For more information please refer : http://msdn.microsoft.com/en-us/library/ms182517%28v=vs.100%29.aspx

참고URL : https://stackoverflow.com/questions/1873191/why-does-testinitialize-get-fired-for-every-test-in-my-visual-studio-unit-tests

반응형