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

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > Nunit
為WPF項目創建單元測試
作者:網絡轉載 發布時間:[ 2016/5/31 16:03:44 ] 推薦標簽:單元測試 軟件測試工具

  1、對普通類(非WPF UI組件)進行測試:
  這和在.Net2.0中使用NUnit進行測試時一樣,不會出現任何問題,參考下面的代碼:
  以下是引用片段:
  [TestFixture]
  public class ClassTest
  {
  [Test]
  public void TestRun()
  {
  ClassLibrary1.Class1 obj = new ClassLibrary1.Class1();
  double expected = 9;
  double result = obj.GetSomeValue(3);
  Assert.AreEqual(expected, result);
  }
  }
  2、對WPF UI組件進行測試
  使用NUnit對WPF UI組件(比如MyWindow,MyUserControl)進行測試的時候,NUnit會報如下異常:“The calling thread must be STA, because many UI components require this”。
  下面是錯誤的測試代碼:
  以下是引用片段:
  [TestFixture]
  public class ClassTest
  {
  [Test]
  public void TestRun()
  {
  WindowsApplication1.Window1 obj = new WindowsApplication1.Window1();
  double expected = 9;
  double result = obj.GetSomeValue(3);
  Assert.AreEqual(expected, result);
  }
  }
  為了讓調用線程為STA,我們可以編寫一個輔助類CrossThreadTestRunner:
  以下是引用片段:
  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Threading;
  using System.Security.Permissions;
  using System.Reflection;
  namespace TestUnit
  {
  public class CrossThreadTestRunner
  {
  private Exception lastException;
  public void RunInMTA(ThreadStart userDelegate)
  {
  Run(userDelegate, ApartmentState.MTA);
  }
  public void RunInSTA(ThreadStart userDelegate)
  {
  Run(userDelegate, ApartmentState.STA);
  }
  private void Run(ThreadStart userDelegate, ApartmentState apartmentState)
  {
  lastException = null;
  Thread thread = new Thread(
  delegate()
  {
  try
  {
  userDelegate.Invoke();
  }
  catch (Exception e)
  {
  lastException = e;
  }
  });
  thread.SetApartmentState(apartmentState);
  thread.Start();
  thread.Join();
  if (ExceptionWasThrown())
  ThrowExceptionPreservingStack(lastException);
  }
  private bool ExceptionWasThrown()
  {
  return lastException != null;
  }
  [ReflectionPermission(SecurityAction.Demand)]
  private static void ThrowExceptionPreservingStack(Exception exception)
  {
  FieldInfo remoteStackTraceString = typeof(Exception).GetField(
  "_remoteStackTraceString",
  BindingFlags.Instance | BindingFlags.NonPublic);
  remoteStackTraceString.SetValue(exception, exception.StackTrace + Environment.NewLine);
  throw exception;
  }
  }
  }
  并編寫正確的測試代碼:
  以下是引用片段:
  [TestFixture]
  public class ClassTest
  {
  [Test]
  public void TestRun()
  {
  CrossThreadTestRunner runner = new CrossThreadTestRunner();
  runner.RunInSTA(
  delegate
  {
  Console.WriteLine(Thread.CurrentThread.GetApartmentState());
  WindowsApplication1.Window1 obj = new WindowsApplication1.Window1();
  double expected = 9;
  double result = obj.GetSomeValue(3);
  Assert.AreEqual(expected, result);
  });
  }
  }
  另外,使用NUnit時,您需要添加對nunit.framework.dll的引用,并對測試類添加[TestFixture]屬性標記以及對測試方法添加[Test]屬性標記,然后將生成的程序集用nunit.exe打開可以了,關于NUnit的具體用法您可以參考其官方文檔。

軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 伊人91在线 | 全黄大全大色全免费大片 | 国产国产精品人在线观看 | 国产精品日本一区二区在线看 | 污视频免费网站 | 波多野结衣在线播放视频 | 2021入口一二三四麻豆 | 日本波多野结衣在线 | xxxxxx日本护士xxxx | 欧美性天天影院欧美狂野 | 精品xxxxxbbbb欧美中文 | 亚洲影视一区二区 | 国产卡1卡2卡三卡在线 | 网站啪啪| 天天射夜夜骑 | 欧美中文综合在线视频 | 青青青视频自偷自拍视频1 青青青视频免费一区二区 青青青久热国产精品视频 青青青国产在线 | 免费特黄一级欧美大片在线看 | 国产毛片一级国语版 | 国产成人亚洲影视在线 | 男女羞羞免费视频 | 亚洲碰碰| 婷婷在线成人免费观看搜索 | 日韩一级欧美一级在线观看 | 国产一级特黄aaaa大片野外 | 1204手机在线观看免费高清 | 操操操免费视频 | 免费在线日韩 | 欧美成人高清乱码 | 欧美3区| 日本一区二区高清不卡 | 国产亚洲欧美在线观看的 | 99国产在线观看 | 精品国产日韩亚洲一区二区 | 欧美福利视频导航 | 天天弄天天操 | 免费人成网站在线高清 | 欧美久操 | hdxxxxx中国老太 | 日韩在线理伦片免费观看 | 全黄冷激性性视频 |