那有沒有不付錢的方法,有,請看 ASP.NET MVC Video Training from Pluralsight 第一篇 Introduction 裡教。
環境確認:Visual Studio 2010 Service Pack 1
設定NUnit測試環境
- 以下為Visual Basic for ASP.NET MVC 3 Test專案實作步驟:
- 在原始專案中,加入一個「類別檔專案」;
- 使用 NuGet 加入 「NUnit」,指令為「Install-Package NUnit」,我的版本號為「2.5.10.11092」,等一下會用到,請依安裝的版本號修變改下面資訊。
- 加入原始專案的參考。
- 修改類別檔專案中,預設 Class1.vb 的檔案,我們要測試的是 HomeController ,那就命名為 HomeControllerTests ,後面加上 Tests。
- 在 HomeControllerTests.vb 中,「Imports NUnit.Framework」,另在「Public Class HomeControllerTests」中,加上「<TestFixture()>」屬性。
- 新增方法,例如,「Public Sub Puts_Message_In_ViewBag() ... 」,加上「<Test()>」屬性。
- 修改原專案裡 HomeController 的 Index Action,把回傳型別修改為 「ViewResult」。你回傳什麼型別,就改為什麼型別。
- 在測試方法中新增程式碼。
- 將原始專案及測試專案「建置」。
Imports NUnit.Framework ''' <summary> ''' 測試類別 ''' </summary> <testfixture()> Public Class HomeControllerTests ''' <summary> ''' 測試方法 ''' </summary> <test()> Public Sub Puts_Message_In_ViewBag() ' HomeController 物件 Dim controller = New HomeController() ' 取得物件 Index() 的結果 Dim result = controller.Index() ' Assert 測試 Index 結果裡的 ViewBag.Message 不是空的 Assert.IsNotEmpty(result.ViewBag.Message) End Sub End Class
這樣就完成整個測試專案。
執行NUnit測試
讓開啟 CMD.exe ,進行到原始專案目錄下,能發現有一個「packages」目錄,讓我們順著目錄走進去「D:\dev\OdeToFood\packages\NUnit.2.5.10.11092\tools」,進到 tools 目錄後,有兩個指令:
nunit.exe :會啟動 GUI 介面程式
nunit-console.exe :文字介面程式
先在 tools 目錄下執使以下指令「D:\dev\OdeToFood\packages\NUnit.2.5.10.11092\tools>nunit-console.exe ..\..\..\OdeToFood.Tests\bin\Debug\OdeToFood.Tests.dll」,意思很簡單,就是執行那個一測試專案。等一下,就能看到執行結果。
例如:
NUnit version 2.5.10.11092 Copyright (C) 2002-2009 Charlie Poole. Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov. Copyright (C) 2000-2002 Philip Craig. All Rights Reserved. Runtime Environment - OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1 CLR Version: 2.0.50727.5446 ( Net 2.0 ) ProcessModel: Default DomainUsage: Single Execution Runtime: Default . Tests run: 1, Errors: 0, Failures: 0, Inconclusive: 0, Time: 0.980056 seconds Not run: 0, Invalid: 0, Ignored: 0, Skipped: 0
我們測試結果 Errors: 0,測試成功了。你可以修改原始專案 ViewBag.Message2 ,把變數名稱多加個 2 ,重新建置專案,結果出現:
NUnit version 2.5.10.11092 Copyright (C) 2002-2009 Charlie Poole. Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov. Copyright (C) 2000-2002 Philip Craig. All Rights Reserved. Runtime Environment - OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1 CLR Version: 2.0.50727.5446 ( Net 2.0 ) ProcessModel: Default DomainUsage: Single Execution Runtime: Default .F Tests run: 1, Errors: 1, Failures: 0, Inconclusive: 0, Time: 1.0290589 seconds Not run: 0, Invalid: 0, Ignored: 0, Skipped: 0 Errors and Failures: 1) Test Error : OdeToFood.Tests.HomeControllerTests.Puts_Message_In_ViewBag System.Reflection.AmbiguousMatchException : 多載解析失敗,因為沒有公用 'IsNotEmpty' 對這些引數而言是最適合的: 'Public Shared Sub IsNotEmpty(collection As System.Collections.ICollection)': 不是最特定。 'Public Shared Sub IsNotEmpty(aString As String)': 不是最特定。 於 Microsoft.VisualBasic.CompilerServices.OverloadResolution.ResolveOverloadedCall(String MethodName, List`1 Candidates, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, BindingFlags LookupFlags, Boolean ReportErrors, ResolutionFailure& Failure) 於 Microsoft.VisualBasic.CompilerServices.OverloadResolution.ResolveOverloadedCall(String MethodName, MemberInfo[] Members, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, BindingFlags LookupFlags, Boolean ReportErrors, ResolutionFailure& Failure) 於 Microsoft.VisualBasic.CompilerServices.NewLateBinding.ResolveCall(Container BaseReference, String MethodName, MemberInfo[] Members, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, BindingFlags LookupFlags, Boolean ReportErrors, ResolutionFailure& Failure) 於 Microsoft.VisualBasic.CompilerServices.NewLateBinding.CallMethod(Container BaseReference, String MethodName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, BindingFlags InvocationFlags, Boolean ReportErrors, ResolutionFailure& Failure) 於 Microsoft.VisualBasic.CompilerServices.NewLateBinding.ObjectLateCall(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, Boolean IgnoreReturn) 於 OdeToFood.Tests.HomeControllerTests.Puts_Message_In_ViewBag() 於 D:\StudyTest\OdeToFood\OdeToFood.Tests\HomeControllerTests.vb: 行 19
出現 Errors: 1,而且還很明確的說是錯在第幾行。
設定NUnit與Visual Studio 2010結合
前面的用法,很不方便,每次都要開CMD而且還要Key一大堆路徑。讓我們使 nunit-console.exe 來與 Visual Studio 2010 結合使用。
測試專案 → 屬性 → 編譯 (這裡的畫面與影片不同)
在「建置後進行編輯」→ 巨集 →
「$(SolutionDir)\packages\NUnit.2.5.10.11092\tools\nunit-console.exe $(TargetPath)」
$(SolutionDir) 為 D:\dev\OdeToFood\
$(TargetPath) 為 D:\dev\OdeToFood\OdeToFood.Tests\bin\Debug\OdeToFood.Tests.dll
按「確定 * 2」即完成。
重新「建置」測試專案。你就能在「輸出」看見測試結果。
當然,以上使用NUnit不只是在Express才能使用,錢錢版,一樣能用。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。