Как я могу определить, является ли мой модульный тест участником упорядоченного теста и, если это так, в какой позиции в этом упорядоченном тесте он находится? - PullRequest
2 голосов
/ 10 ноября 2011

Среда:

У меня есть программа - CSIS, - для которой мне нужно запустить множество автоматизированных тестов в Visual Studio 2010 с использованием C #.У меня есть ряд функций, которые нужно запускать в разных порядках, но все они начинаются и заканчиваются на одном «домашнем экране» CSIS.Тесты будут выполняться самостоятельно как отдельный CodedUITest (тип файла .cs) или как упорядоченный тест (тип файла .orderedtest).

Цель:

Цель состоит в том, чтобы открыть домашнюю страницу CSIS один раз, независимо от того, какой из модульных тестов выполняется первым, а затем, после завершения всех CodedUITests, нетнезависимо от того, какой юнит-тест является последним, автоматический тест закроет CSIS.Я не хочу создавать отдельный модульный тест для открытия CSIS на домашней странице, а другой - для закрытия CSIS, так как это очень неудобно для тестировщиков.

Текущее решение:

ОБНОВЛЕНИЕ: Новый большой вопрос - как мне заставить '[ClassInitialize]' работать?

Дополнительные мысли:

ОБНОВЛЕНИЕ: Теперь мне просто нужно ClassInitialize для выполнения кода в начале и ClassCleanUp для выполнения кода в конце тестового набора.

Если вам нужен реальный код, дайте мне знать.

Обновление исследования:

Благодаря ответу Izcd я смог более точно найти ответ на свой вопрос.Я нашел ответ в Интернете на свою проблему.

К сожалению, я не понимаю, как реализовать его в своем коде.Я вставил код, как показано ниже в разделе «Код» этого вопроса, и тест работает нормально, за исключением того, что он выполняет функции OpenWindow () и CloseWindow () после каждого теста, а не вокруг всего набора тестов.Так что в конечном итоге код ничего нового не делает.Как это исправить?

статический приватный UIMap sharedTest = новый UIMap ();

[ClassInitialize] 
static public void ClassInit(TestContext context) 
{ 
    Playback.Initialize(); 
    try 
    { 
        sharedTest.OpenCustomerKeeper(); 

    } 
    finally 
    { 
        Playback.Cleanup(); 
    } 

}

======================================================================================

Code

пространство имен CSIS_TEST {// тонна операторов 'using' здесь

public partial class UIMap
{
    #region Class Initializization and Cleanup
    static private UIMap sharedTest = new UIMap();

    [ClassInitialize]
    static public void ClassInit(TestContext context)
    {
        Playback.Initialize();
        try
        {
            sharedTest.OpenWindow();
        }
        finally
        {
            Playback.Cleanup();
        }
    }

    [ClassCleanup]
    static public void ClassCleanup()
    {
        Playback.Initialize();
        try
        {

            sharedTest.CloseWindow();
        }
        finally
        {
            Playback.Cleanup();
        }
    }
    #endregion

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

Среда модульного тестирования Microsoft включает атрибуты ClassInitialise и ClassCleanUp, которые можно использовать для указания методов, которые выполняют функции до и после запуска теста. (http://msdn.microsoft.com/en-us/library/ms182517.aspx)

Вместо того, чтобы пытаться проинформировать юнит-тесты о своей позиции, я бы предложил встроить логику открытия и закрытия главного экрана в вышеупомянутые методы, отмеченные ClassInitialise и ClassCleanUp.

0 голосов
/ 16 ноября 2011

Я разобрался с ответом после очень долгого процесса задавать вопросы о StackOverflow, Googling и просто разбираться с кодом.

Ответ заключается в использовании AssemblyInitialize и AssemblyCleanup и записи кода для них в файле DatabaseSetup.cs , который должен автоматически генерироваться в вашем проект. Вы должны обнаружить, что здесь уже есть функция AssemblyInitialize, но она очень простая и после нее нет AssemblyCleanup. Все, что вам нужно сделать, это создать статическую копию вашего UIMap и использовать ее в AssemblyInitialize для запуска вашего кода OpenWindow ().

Скопируйте формат функции AssemblyInitialize, чтобы создать функцию AssemblyCleanup и добавить функцию CloseWindow ().

Убедитесь, что ваши функции Open / CloseWindow содержат только базовый код (такой как Process.Start / Kill), поскольку любые сложные переменные, такие как формы, уже очищены и не будут работать.

Вот код в моем DatabaseSetup.cs:

using System.Data;
using System.Data.Common;
using System.Configuration;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.Data.Schema.UnitTesting;
using System.Windows.Input;
using Keyboard = Microsoft.VisualStudio.TestTools.UITesting.Keyboard;
using Mouse = Microsoft.VisualStudio.TestTools.UITesting.Mouse;
using MouseButtons = System.Windows.Forms.MouseButtons;

namespace CSIS_TEST
{
    [TestClass()]
    public class DatabaseSetup
    {
        static private UIMap uIMap = new UIMap();
        static int count = 0;

        [AssemblyInitialize()]
        public static void InitializeAssembly(TestContext ctx)
        {
            DatabaseTestClass.TestService.DeployDatabaseProject();
            DatabaseTestClass.TestService.GenerateData();

            if(count < 1)
                uIMap.OpenWindow();
            count++;
        }

        [AssemblyCleanup()]
        public static void InitializeAssembly()
        {            
            uIMap.CloseWindow();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...