25

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

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

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

4

4 回答 4

58

是的,有可能。您可以为此目的使用 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

于 2013-02-08T15:18:01.530 回答
3

重要的

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

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

这里有两件重要的事情 1. 基础的 [TestClass] 属性是 MANDATORY

2. ApplicationCleanup 的签名看它是一个静态方法

就是这样,你就完成了。我很难挣扎和调试它。

于 2018-08-31T10:45:16.787 回答
1

也许您正在寻找的是TestCleanup 属性

编辑:另外,如果您想在所有测试都运行后运行某些东西,则AssemblyCleanupAttribute可能更合适。

于 2013-02-08T15:16:40.730 回答
1

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

于 2016-05-20T10:08:12.937 回答