2013-02-08 3 views
17

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

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

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

ответ

35

Да, это возможно. Вы можете использовать атрибут 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

Сладкий, который работал благодаря. Я не думал, что это сработает, поскольку они находятся в разных проектах и, следовательно, в разных собраниях. – jgerstle

0

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