Как я могу автоматически запустить свои тесты после компиляции? - PullRequest
2 голосов
/ 29 января 2010

Есть ли простой способ автоматически запускать мои модульные тесты после успешной компиляции?

Ответы [ 3 ]

2 голосов
/ 29 января 2010

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

Если вы используете MSTest в Visual Studio, вы можете запустить все модульные тесты так же просто, как Ctrl + R, A . Когда вы это делаете, VS автоматически компилирует код перед запуском тестов.

2 голосов
/ 27 ноября 2012

Вы также можете сделать это

  1. Создайте командный файл для запуска mstest с желаемыми параметрами и используйте фиксированное имя файла результатов. Используйте команду START для файла результатов, чтобы загрузить его в IDE. Сохраните пакетный файл по тому же пути, что и ваше решение.

    REM УДАЛИТЬ ФАЙЛ СТАРЫХ РЕЗУЛЬТАТОВ
    del TestResults \ auto.trx
    mstest /testcontainer:MyApp\UnitTest\bin\x86\debug\MyUnitTest.dll / категория: "Ночные" /resultsfile:TestResults\auto.trx
    start TestResults \ auto.trx

  2. Вызывать этот пакетный файл в макросе после каждого события сборки (я использую отдельный поток, чтобы я мог сохранить кодирование в IDE)

В ваших EnvironmentEvents добавьте следующий код Глобальный флаг, указывающий, следует ли запускать тесты
Частные тесты как логическое

Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin  
    runTests = True
End Sub

Private Sub BuildEvents_OnBuildProjConfigDone(ByVal Project As String, ByVal ProjectConfig As String, ByVal Platform As String, ByVal SolutionConfig As String, ByVal Success As Boolean) Handles BuildEvents.OnBuildProjConfigDone
    If Not Success Then
        runTests = False
        DTE.ExecuteCommand("Build.Cancel")
    End If
End Sub

Private Sub BuildEvents_OnBuildDone( _
    ByVal Scope As EnvDTE.vsBuildScope, _
    ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone

    If (Action = vsBuildAction.vsBuildActionBuild Or Action = vsBuildAction.vsBuildActionRebuildAll) And _
       Scope = vsBuildScope.vsBuildScopeSolution And _
       runTests Then

        Dim thrd As New System.Threading.Thread(AddressOf threadRunTests)  

        thrd.Start()
    End If
End Sub

Private Sub threadRunTests()

    path = System.IO.Path.GetDirectoryName(DTE.Solution.FullName)

    Environment.CurrentDirectory = path

    DTE.StatusBar.Text = "Running tests..."

    Shell(path & "\RunNightlyTests.bat", AppWinStyle.MinimizedNoFocus, True)

    DTE.StatusBar.Text = "Finished Running tests"
End Sub
2 голосов
/ 29 января 2010

Да, но, вероятно, вы не хотите. Обычно это делается на CI-сервере (то есть на вашем сервере сборки) или на разовой основе.

Но если вы действительно хотите попробовать это, в VS вы можете выполнить тесты как задачу «Постстройка». Вы можете просто указать командную строку для запуска (т.е. nunit), а затем направить ее в соответствующую библиотеку (есть специальные переменные, которые позволят вам ссылаться на только что построенный проект dll).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...