2010-01-28 3 views
2

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

+0

Некоторые структуры теста сделать это для вас. В NUnit вы можете установить параметры перезагрузки и повторных тестов, когда ваша сборка изменится. – Ray

ответ

2

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

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

+0

Еще лучше, спасибо – user261258

2

Да, но, вероятно, вы этого не хотите. Обычно это делается на сервере CI (т. Е. На сервере сборки) или на разовой основе.

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

+0

Что такое командная строка? – user261258

+0

Исполняемый файл. Щелкните правой кнопкой мыши по свойствам проекта и перейдите к 'Build Events'. В post build вы можете написать что-то вроде: '' $ (ProjectDir) .. \ nant \ nant "-buildfile:" $ (ProjectDir) .. \ local.deploy.task "-D: startPath =" $ (ProjectDir) \ "' (это взято из одного из наших проектов). –

2

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

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

    REM УДАЛЕНИЕ СТАРОЙ файл результатов
    дель TestResults \ auto.trx
    MSTest /testcontainer:MyApp\UnitTest\bin\x86\debug\MyUnitTest.dll/категория: "Ночь" /resultsfile:TestResults\auto.trx
    старт TestResults \ auto.trx

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

в вашем EnvironmentEventsд.д. следующий код 'Глобальный флаг, чтобы указать, если тесты должны выполняться
Частные runTests As Boolean

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