在Visual Studio 2010之中,只有
蟹老闆等級(錢錢)付費版本才測試功能,如果你是使用Visual Studio 2010 Express版本,那很抱歉,些版本不支援,請先付錢在說。
那有沒有不付錢的方法,有,請看
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」。你回傳什麼型別,就改為什麼型別。
- 在測試方法中新增程式碼。
- 將原始專案及測試專案「建置」。
01 | Imports NUnit.Framework |
07 | Public Class HomeControllerTests |
13 | Public Sub Puts_Message_In_ViewBag() |
15 | Dim controller = New HomeController() |
17 | Dim result = controller.Index() |
19 | Assert.IsNotEmpty(result.ViewBag.Message) |
這樣就完成整個測試專案。
執行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才能使用,錢錢版,一樣能用。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。