所有测试在MStest中完成执行后是否可以运行代码

时间:2013-02-08 15:12:41

标签: c# mstest

我正在编写编码的ui测试,如果它尚未打开,我将打开应用程序。然后,如果其中一个失败我关闭应用程序,事情是我在多个项目中有多个测试是否有办法在所有测试完成执行后关闭应用程序? testSettings文件中是否有可能出现的内容?

如果这有帮助,我的所有测试类都来自一个codeduiTestBase,这就是我设置我所拥有的设置的方式。

我不想在每次测试运行之前和之后打开和关闭应用程序,因为它是一个很大的应用程序,加载时间太长。

4 个答案:

答案 0 :(得分:47)

是的,这是可能的。您可以将AssemblyCleanup属性用于此目的:

  

标识包含在所有测试之后使用的代码的方法   程序集已运行并释放程序集获取的资源。

以下是根据执行时间排列的所有MSTest方法的概述:

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

请参阅:MSTest-Methods

答案 1 :(得分:0)

也许您正在寻找的是TestCleanup attribute

编辑:此外,如果您想在运行所有测试后运行某些内容,AssemblyCleanupAttribute可能更合适。

答案 2 :(得分:0)

如果您只想在单个类中的所有测试完成后进行清理,请使用ClassCleanup属性而不是AssemblyCleanup属性

答案 3 :(得分:0)

重要

使用基类的人也可以在那里进行程序集清理

[TestClass]
public class Page : PageContract, IWindowControlAccess
{
[AssemblyCleanup()]
    public static void ApplicationCleanup()
    {
        Cleanup();
    }
}

这里有两件重要的事情 1。 底部的[TestClass]属性是强制性的

2。 ApplicationCleanup的签名请参见其静态方法

就是这样,您完成了。我很难进行调试和调试。