Есть ли простой способ автоматического запуска моих юнит-тестов после успешной компиляции?Как я могу автоматически запускать свои тесты после компиляции?
ответ
Подумайте об этом наоборот: вместо того, чтобы запускать модульные тесты каждый раз, когда вы компилируете, просто приходите в привычку часто запускать модульные тесты.
Если вы используете MSTest в Visual Studio, вы можете запускать все модульные тесты так же просто, как Ctrl + R, A. Когда вы это сделаете, VS автоматически компилирует код перед запуском тестов.
Еще лучше, спасибо – user261258
Да, но, вероятно, вы этого не хотите. Обычно это делается на сервере CI (т. Е. На сервере сборки) или на разовой основе.
Но если вы действительно хотите попробовать, в VS вы можете выполнить тесты как задачу «Построить сборку». Вы можете просто указать запущенную командную строку (например, nunit), а затем перенаправить ее в соответствующую библиотеку lib (есть специальные переменные, которые позволят вам ссылаться на только что построенную DLL проекта).
Что такое командная строка? – user261258
Исполняемый файл. Щелкните правой кнопкой мыши по свойствам проекта и перейдите к 'Build Events'. В post build вы можете написать что-то вроде: '' $ (ProjectDir) .. \ nant \ nant "-buildfile:" $ (ProjectDir) .. \ local.deploy.task "-D: startPath =" $ (ProjectDir) \ "' (это взято из одного из наших проектов). –
Вы также можете сделать это
Создайте пакетный файл для запуска MSTest с требуемыми параметрами и использовать фиксированное имя файла результатов. Используйте команду START в файле результатов, чтобы загрузить ее в среду IDE. Сохраните пакетный файл по тому же пути, что и ваше решение.
REM УДАЛЕНИЕ СТАРОЙ файл результатов
дель TestResults \ auto.trx
MSTest /testcontainer:MyApp\UnitTest\bin\x86\debug\MyUnitTest.dll/категория: "Ночь" /resultsfile:TestResults\auto.trx
старт TestResults \ auto.trxвызова этого пакетный файл в макросе после каждого события сборки (я использую отдельную нить, так что я могу держать кодирование далеко в 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
Некоторые структуры теста сделать это для вас. В NUnit вы можете установить параметры перезагрузки и повторных тестов, когда ваша сборка изменится. – Ray