Поделиться через


ClassInitializeAttribute - класс

Обновлен: Ноябрь 2007

Идентифицирует метод, содержащий код, который должен использоваться до запуска любого теста в тестовом классе, для выделения ресурсов, которые будут использоваться тестовым классом. Этот класс не наследуется.

Пространство имен:  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.

Только один метод в классе может быть оформлен данным атрибутом.

ms245248.alert_caution(ru-ru,VS.90).gifВажное примечание.

Этот атрибут нельзя использовать в модульном тесте 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() из предыдущих примеров кода. Создайте тестовый проект и поместите в документ тестового класса следующий код. Добавьте в проект соответствующие ссылки. Этот код содержит атрибуты, управляющие порядком выполнения инициализации и очистки метода, класса и сборки.

В частности, обратите внимание на атрибут ClassInitialize в методе ClassInit().

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 (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантируется.

См. также

Ссылки

ClassInitializeAttribute - члены

Microsoft.VisualStudio.TestTools.UnitTesting - пространство имен

Другие ресурсы

Структура модульных тестов

Платформа Unit Testing Framework