首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我的Visual Studio单元测试中的每个测试都会触发TestInitialize?

为什么我的Visual Studio单元测试中的每个测试都会触发TestInitialize?
EN

Stack Overflow用户
提问于 2009-12-09 19:12:35
回答 4查看 76.5K关注 0票数 168

我使用的是Visual Studio2010Beta2,我只有一个[TestClass],它有一个[TestInitialize][TestCleanup]和几个[TestMethods]

每次运行测试方法时,initialize和cleanup方法也会运行!

我的印象是,每次本地测试运行时,[TestInitialize][TestCleanup]应该只运行一次。

对吗?如果不是,正确的方法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-09 20:25:31

在每次测试之前和之后都会运行TestInitializeTestCleanup,这是为了确保不耦合任何测试。

如果要在所有测试之前和之后运行方法,请使用ClassInitializeClassCleanup属性修饰相关方法。

Visual Studio中自动生成的测试文件中的相关信息:

您可以在编写测试时使用以下附加属性:

代码语言:javascript
复制
// 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() { }
票数 332
EN

Stack Overflow用户

发布于 2009-12-09 20:10:09

这是测试套件的标准行为:在每次测试之前和之后进行设置和拆卸。其哲学是测试不应该相互依赖。如果您想要另一种行为,您可能应该使用在每次测试之间持久存在的静态对象。

票数 12
EN

Stack Overflow用户

发布于 2015-06-24 07:09:51

取自microsoft documentation的完整示例

代码语言:javascript
复制
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);
        }
    }
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1873191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档