다음을 통해 공유


ClassInitializeAttribute 클래스

업데이트: 2007년 11월

테스트 클래스의 테스트를 실행하기 전에 테스트 클래스에 사용할 리소스를 할당하기 위해 사용해야 할 코드가 들어 있는 메서드를 식별합니다. 이 클래스는 상속될 수 없습니다.

네임스페이스:  Microsoft.VisualStudio.TestTools.UnitTesting
어셈블리:  Microsoft.VisualStudio.SmartDevice.UnitTestFramework(Microsoft.VisualStudio.SmartDevice.UnitTestFramework.dll)

구문

<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple := False)> _
Public NotInheritable Class ClassInitializeAttribute _
    Inherits Attribute

Dim instance As ClassInitializeAttribute
[AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false)]
public sealed class ClassInitializeAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method, AllowMultiple = false)]
public ref class ClassInitializeAttribute sealed : public Attribute
public final class ClassInitializeAttribute extends Attribute

설명

부하 테스트 도중 이 특성으로 표시된 메서드는 한 번 실행되고, 이때 수행되는 초기화 작업은 전체 테스트에 적용됩니다. 테스트에서 가상 사용자가 반복될 때마다 초기화 작업을 수행해야 하는 경우에는 TestInitializeAttribute를 사용합니다.

메서드가 실행되는 순서는 다음과 같습니다.

  1. AssemblyInitializeAttribute로 표시된 메서드

  2. ClassInitializeAttribute로 표시된 메서드

  3. TestInitializeAttribute로 표시된 메서드

  4. TestMethodAttribute로 표시된 메서드

각 클래스에서 한 개의 메서드만을 이 특성으로 데코레이팅할 수 있습니다.

중요:

ASP.NET 단위 테스트 즉, [HostType("ASP.NET")] 특성이 지정된 테스트에서는 이 특성을 사용하지 말아야 합니다. IIS 및 ASP.NET에는 상태가 저장되지 않는 특징이 있으므로 이 특성으로 데코레이팅된 메서드가 테스트를 실행할 때마다 여러 차례 호출될 수 있습니다.

이 특성은 메서드에 지정할 수 있습니다. 이 특성의 인스턴스 하나만 메서드에 적용할 수 있습니다.

특성을 사용하는 방법에 대한 자세한 내용은 특성을 사용하여 메타데이터 확장을 참조하십시오.

예제

다음 예제에서는 테스트의 각 단계에서 테스트 엔진이 실행해야 하는 메서드를 나타내는 데 사용되는 초기화 및 정리 특성을 보여 줍니다.

첫 번째 코드 샘플에 테스트할 클래스와 메서드가 포함되어 있습니다. 이 예제를 실행하려면 클래스 라이브러리 프로젝트를 만들고 코드를 다음 예제로 바꿉니다.

using System;

namespace SampleClassLib
{
    public class DivideClass
    {
        public static int DivideMethod(int denominator)
        {
            return (2 / denominator);
        }
    }
}
Imports System

Namespace SampleClassLib
    Public Class DivideClass
        Shared Function DivideMethod(ByVal denominator As Integer) As Integer
            Return 2 \ denominator
        End Function
    End Class
End Namespace

다음 예제에는 이전 코드 예제에 나와 있는 DivideMethod()를 테스트하는 코드가 포함되어 있습니다. 테스트 프로젝트를 만들고 테스트 클래스 문서에 다음 코드를 삽입합니다. 프로젝트에 적절한 참조를 추가합니다. 이 코드에는 메서드, 클래스 및 어셈블리의 초기화 및 정리 실행 순서를 제어하는 특성이 포함되어 있습니다.

특히 ClassInit() 메서드의 ClassInitialize 특성에 주의하십시오.

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);
        }
    }
}
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports SampleClassLib2.SampleClassLib
Imports System
Imports System.IO
Imports System.Windows.Forms

Namespace TestNamespace
    <TestClass()> _
    Public NotInheritable Class DivideClassTest
        <AssemblyInitialize()> _
        Public Shared Sub AssemblyInit(ByVal context As TestContext)
            MsgBox("AssemblyInit " + context.TestName)
        End Sub 'AssemblyInit

        <ClassInitialize()> _
        Public Shared Sub ClassInit(ByVal context As TestContext)
            MsgBox("ClassInit " + context.TestName)
        End Sub 'ClassInit

        <TestInitialize()> _
        Public Sub Initialize()
            MsgBox("TestMethodInit")
        End Sub 

        <TestCleanup()> _
        Public Sub Cleanup()
            MsgBox("TestMethodCleanup")
        End Sub 

        <ClassCleanup()> _
        Public Shared Sub ClassCleanup()
            MsgBox("ClassCleanup")
        End Sub 

        <AssemblyCleanup()> _
        Public Shared Sub AssemblyCleanup()
            MsgBox("AssemblyCleanup")
        End Sub

        <TestMethod()> _
        <ExpectedException(GetType(System.DivideByZeroException))> _
        Public Sub DivideMethodTest()
            DivideClass.DivideMethod(0)
        End Sub
    End Class
End Namespace

상속 계층 구조

System.Object
  System.Attribute
    Microsoft.VisualStudio.TestTools.UnitTesting.ClassInitializeAttribute

스레드로부터의 안전성

이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

참고 항목

참조

ClassInitializeAttribute 멤버

Microsoft.VisualStudio.TestTools.UnitTesting 네임스페이스

기타 리소스

단위 테스트의 구조

단위 테스트 프레임워크