ClassInitializeAttribute 클래스
테스트 클래스의 테스트를 실행하기 전에 테스트 클래스에 사용할 리소스를 할당하기 위해 사용해야 할 코드가 들어 있는 메서드를 식별합니다. 이 클래스는 상속될 수 없습니다.
상속 계층 구조
Object
Attribute
Microsoft.VisualStudio.TestTools.UnitTesting.ClassInitializeAttribute
네임스페이스: Microsoft.VisualStudio.TestTools.UnitTesting
어셈블리: Microsoft.VisualStudio.QualityTools.UnitTestFramework(Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)
구문
‘선언
<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple := False)> _
Public NotInheritable Class ClassInitializeAttribute _
Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false)]
public sealed class ClassInitializeAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method, AllowMultiple = false)]
public ref class ClassInitializeAttribute sealed : public Attribute
[<Sealed>]
[<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false)>]
type ClassInitializeAttribute =
class
inherit Attribute
end
public final class ClassInitializeAttribute extends Attribute
ClassInitializeAttribute 형식에서는 다음과 같은 멤버를 노출합니다.
생성자
이름 | 설명 | |
---|---|---|
ClassInitializeAttribute | ClassInitializeAttribute 클래스의 새 인스턴스를 초기화합니다. |
위쪽
속성
이름 | 설명 | |
---|---|---|
TypeId | 파생 클래스에서 구현된 경우 이 Attribute에 대한 고유 식별자를 가져옵니다. (Attribute에서 상속됨) |
위쪽
메서드
이름 | 설명 | |
---|---|---|
Equals | 인프라입니다. 이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다. (Attribute에서 상속됨) | |
GetHashCode | 이 인스턴스의 해시 코드를 반환합니다. (Attribute에서 상속됨) | |
GetType | 현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨) | |
IsDefaultAttribute | 파생 클래스에서 재정의된 경우 이 인스턴스의 값이 파생 클래스의 기본값인지 여부를 나타냅니다. (Attribute에서 상속됨) | |
Match | 파생 클래스에서 재정의된 경우 이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다. (Attribute에서 상속됨) | |
ToString | 현재 개체를 나타내는 문자열을 반환합니다. (Object에서 상속됨) |
위쪽
명시적 인터페이스 구현
이름 | 설명 | |
---|---|---|
System#Runtime#InteropServices#_Attribute#GetIDsOfNames | 이름 집합을 해당하는 디스패치 식별자 집합에 매핑합니다. (Attribute에서 상속됨) | |
System#Runtime#InteropServices#_Attribute#GetTypeInfo | 인터페이스의 형식 정보를 가져오는 데 사용할 수 있는 개체의 형식 정보를 검색합니다. (Attribute에서 상속됨) | |
System#Runtime#InteropServices#_Attribute#GetTypeInfoCount | 개체에서 제공하는 형식 정보 인터페이스의 수를 검색합니다(0 또는 1). (Attribute에서 상속됨) | |
System#Runtime#InteropServices#_Attribute#Invoke | 개체에서 노출하는 메서드와 속성에 대한 액세스를 제공합니다. (Attribute에서 상속됨) |
위쪽
설명
부하 테스트 도중 이 특성으로 표시된 메서드는 한 번 실행되고, 이때 수행되는 초기화 작업은 전체 테스트에 적용됩니다. 테스트에서 가상 사용자가 반복될 때마다 초기화 작업을 수행해야 하는 경우에는 TestInitializeAttribute를 사용합니다.
메서드가 실행되는 순서는 다음과 같습니다.
AssemblyInitializeAttribute로 표시된 메서드
ClassInitializeAttribute로 표시된 메서드
TestInitializeAttribute로 표시된 메서드
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
스레드로부터의 안전성
이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.
참고 항목
참조
Microsoft.VisualStudio.TestTools.UnitTesting 네임스페이스