亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > Nunit
NUnit的原理
作者:網絡轉載 發布時間:[ 2013/12/16 13:35:00 ] 推薦標簽:

網絡上可以搜索到很多TDD的文章,但是很大一部分只是講述怎樣使用NUnit等工具的使用。只有切身的去體會TDD的每一個環節,才能真正理解TDD。

工具: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);
 }
}

軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 午夜在线观看免费 | 久久精选视频 | 一级特黄aa大片免费播放视频 | 黄漫画黄网站在线观看 | 成人性动漫在线观看视频 | 狂野欧美性猛交xxxx乱大交 | 久久er国产精品免费观看1 | 亚洲 欧美 中文 日韩欧美 | 干干日日 | 国产高清精品久久久久久久 | 久久久久国产精品免费免费 | 免费伦理片网站 | 久久精品成人国产午夜 | 动漫精品一区二区三区四区 | 日本全身露裸无遮挡黄漫画 | 色吧在线视频在线观看 | 一级看片免费视频囗交 | 1024手机在线基地 | 精品无码一区在线观看 | 国产a v高清一区二区三区 | 国产精品免费看久久久香蕉 | 久在草视频 | 欧美3p在线观看一区二区三区 | 亚洲精品不卡午夜精品 | 亚洲成人在线网 | 色片免费网站 | 国产成人福利免费观看 | 天天射影院| 午夜a一级毛片一.成 | 欧美性猛交ⅹxxx乱大交禽 | 午夜影视在线 | 欧美一区二区三区四区视频 | 一区二区三区四区国产 | 国产亚洲人成网站天堂岛 | 无毛片 | 亚洲欧美日韩人成 | 拔擦拔擦8x高清在线 | 久久午夜鲁丝片午夜精品 | 欧美日韩视频一区三区二区 | 精品九九人人做人人爱 | 成年人网站免费 |