NUnit的原理
工具:NUnit的原理
NUnit的原理很簡單,就是新建一個TestFixture例項,然後依次呼叫TestFixture中的Test Case,然後紀錄Test Case的執行結果
NUnit的核心物件是TestCase, TestSuit, TestResult
TestCase指一個Test Case,比如一個[Test]屬性標記的方法
TestSuit指一組Test Case,比如一個[TestFixture]屬性標記的物件
TestResult指Test Case執行的結果,TestResult是一個抽象類,在NUnit中,有兩個類是繼承自TestResult的:TestCaseResult和TestSuiteResult
NUnit是怎樣執行Test Case的
NUnit定義了一個處理Test Case的抽象類TestCase
TestCase類最重要的方法就是Run()
public override TestResult Run(EventListener listener)
public abstract void Run(TestCaseResult result);
TestCase執行的結果會存入一個TestCaseResult物件
呼叫Run方法如果傳入實現了EventListener介面的物件話,就可以在TestCase實際執行之前以及TestCase執行之後進行自定義的處理
......
listener.TestStarted(this);
Run(testResult);
listener.TestFinished(testResult);
......
NUnit還定義了一個實現抽象類TestCase的通用模版
public abstract class TemplateTestCase : TestCase
TemplateTestCase中Run方法的基本框架為
public override void Run(TestCaseResult testResult )
{
try
{
InvokeSetUp(); //設定環境
InvokeTestCase(); //執行Test Case
InvokeTearDown(); //恢復環境
ProcessNoException(testResult); //無異常退出
}
catch
{
ProcessException(testResult); //異常處理
}
}
在Run方法中還會計算Test Case實際執行的時間和所用的記憶體
DateTime start = DateTime.Now;
long before = System.GC.GetTotalMemory( true );
.... //run test case
long after = System.GC.GetTotalMemory( true );
testResult.Leakage = after - before;
DateTime stop = DateTime.Now;
TimeSpan span = stop.Subtract(start);
testResult.Time = (double)span.Ticks / (double)TimeSpan.TicksPerSecond;
下面幾個類都是繼承自TestCase類或者TemplateTestCase類
NormalTestCase //一般的Test Case
NotRunnableTestCase //不可執行的Test Case
ExpectedExceptionTestCase //定了期望異常的Test Case
為什麼寫的Test Case沒有自動執行
寫Test Case時候要注意,Test Case必須是public的,無引數的,無返回值的函式
參考:
public class NotRunnableTestCase : TestCase
{
public NotRunnableTestCase(MethodInfo method) : base(method.DeclaringType.FullName, method.Name)
{
string reason;
if (method.IsAbstract)
reason = "it must not be abstract";
else if (method.IsStatic)
reason = "it must be an instance method";
else if (!method.IsPublic)
reason = "it must be a public method";
else if (method.GetParameters().Length != 0)
reason = "it must not have parameters";
else if (!method.ReturnType.Equals(typeof(void)))
reason = "it must return void";
else
reason = "reason not known";
ShouldRun = false;
IgnoreReason = String.Format("Method {0}'s signature is not correct: {1}.", method.Name, reason);
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-364810/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- NUnit 的各個版本
- NUnit中文說明文件
- 命令列執行Nunit命令列
- NUnit2.0詳細使用方法
- 利用Selenium搭建Nunit測試框架框架
- 在.NET開發中的單元測試工具之——NUnit
- 單元測試之道C#版:使用NUnitC#
- .net持續整合測試篇之Nunit that斷言
- 【喬樑】用Nant和Nunit構建C#專案NaNC#
- .net持續整合測試篇之Nunit常見斷言
- C# SQL語句自動生成 給出NUnit Test方案C#SQL
- .net持續整合測試篇之Nunit引數化測試
- javascript的this原理JavaScript
- JavaScript 的 this 原理JavaScript
- Handler的原理
- RMAN的原理
- Redo的原理
- rebalance的原理
- 幸福的原理
- pr劫持的原理及操作例項、pr劫持的原理
- synchronized 鎖的原理synchronized
- https的原理HTTP
- computed的原理
- Mirror 的工作原理
- Spark的工作原理Spark
- Cocoapods的原理
- (轉)WebSocket的原理Web
- View的工作原理View
- 【Mysql】MHA的原理MySql
- HashMap的工作原理HashMap
- DHCP的工作原理
- tcmalloc的工作原理
- undo的工作原理
- 鋼琴的原理
- RSA的傻瓜原理
- [zt] RMAN的原理
- OAuth的工作原理OAuth
- 電鏡的成像原理-透射電鏡成像原理1