Подтвердить что ты не робот

Возможно ли запустить код после завершения всех тестов в MStest

Я пишу кодированные тесты ui, и я открываю приложение, если оно еще не открыто. Тогда, если один из них не работает, я закрываю приложение. У меня есть несколько тестов в нескольких проектах, есть ли способ закрыть приложение после завершения всех тестов? Возможно ли что-то в файле testSettings?

Если это вообще помогает, все мои тестовые классы выходят из одной codeduiTestBase, и именно так я настраиваю настройки, которые у меня есть.

Я не хочу открывать и закрывать приложение до и после запуска каждого теста, потому что это большое приложение, и загрузка занимает слишком много времени.

4b9b3361

Ответ 1

Да, это возможно. Вы можете использовать атрибут AssemblyCleanup для этой цели:

Определяет метод, содержащий код, который будет использоваться после тестов allсборка выполнена и освобождает ресурсы, полученные сборкой.

Ниже представлен обзор всех методов 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-Методы

Ответ 2

Возможно, вы ищете атрибут TestCleanup?

EDIT: Кроме того, если вы хотите запустить что-то после выполнения всех тестов, более подходящим может быть AssemblyCleanupAttribute.

Ответ 3

Если вы просто хотите очистить после завершения всех тестов внутри одного класса, используйте атрибут ClassCleanup, а не атрибут AssemblyCleanup