如何在编译后自动运行我的测试?

时间:2010-01-28 21:57:17

标签: .net visual-studio unit-testing

成功编译后,有没有简单的方法可以自动运行我的单元测试?

3 个答案:

答案 0 :(得分:2)

是的,但可能你不想。这通常在CI服务器(即您的构建服务器)上或在临时基础上完成。

但如果您真的想尝试一下,在VS中您可以将测试作为“Post Build”任务执行。你可以指定一个命令行来运行(即nunit),然后将它指向适当的lib(有一些特殊的变量可以让你链接到刚构建的项目dll。)

答案 1 :(得分:2)

反过来考虑一下:每次编译时都不要运行单元测试,而只是养成经常运行单元测试的习惯。

如果您在Visual Studio中使用MSTest,则可以像 Ctrl + R,A 一样轻松运行所有单元测试。执行此操作时,VS会在运行测试之前自动编译代码。

答案 2 :(得分:2)

你也可以这样做

  1. 创建批处理文件以使用所需参数运行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

  2. 在每次构建事件后在宏中调用此批处理文件(我使用单独的线程,以便我可以在IDE中继续编码)

  3. 在您的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