成功编译后,有没有简单的方法可以自动运行我的单元测试?
答案 0 :(得分:2)
是的,但可能你不想。这通常在CI服务器(即您的构建服务器)上或在临时基础上完成。
但如果您真的想尝试一下,在VS中您可以将测试作为“Post Build”任务执行。你可以指定一个命令行来运行(即nunit),然后将它指向适当的lib(有一些特殊的变量可以让你链接到刚构建的项目dll。)
答案 1 :(得分:2)
反过来考虑一下:每次编译时都不要运行单元测试,而只是养成经常运行单元测试的习惯。
如果您在Visual Studio中使用MSTest,则可以像 Ctrl + R,A 一样轻松运行所有单元测试。执行此操作时,VS会在运行测试之前自动编译代码。
答案 2 :(得分:2)
你也可以这样做
创建批处理文件以使用所需参数运行mstest并使用固定结果文件名。使用结果文件上的START命令将其加载到IDE中。将批处理文件保存在与解决方案相同的路径中。
REM删除旧结果文件
del TestResults \ auto.trx
mstest/testcontainer:MyApp\UnitTest\bin\x86\debug•MyUnitTest.dll/ category:“Nightly”/resultsfile:TestResults\auto.trx
启动TestResults \ auto.trx
在每次构建事件后在宏中调用此批处理文件(我使用单独的线程,以便我可以在IDE中继续编码)
在您的EnvironmentEvents中添加以下代码
'全局标志,指示是否应运行测试
Private 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