一、单元测试框架NUnit
NUnit是所有.net语言的单元测试框架。使用C#语言编写。
测试框架:NUnit3
1. 安装NuGet包管理器
2. 在NuGet中安装NUnit、NUnit.Console和NUnit 3 Test Adapter
本地安装版本为:NUnit(3.12.0)、NUnit.Console(3.10.0)NUnit 3 Test Adapter(V3.15.1.0)
此时查看项目引用中包含nunit.framework.dll,安装完重启VS。
二、测试框架TestStack.White
1. 在NuGet中安装TestStack.White
2. 或者可通过NuGet控制台(PowerShell)进行安装
在VS中打开工具->NuGet包管理器->程序包管理器控制台(Powershell,如果没有可手动下载)
a. 输入install-package TestStack.White
b. 输入install-package Nunit
此时查看项目引用中包含TestStack.White,安装完重启VS。
三、代码中引入
NUnit作用是添加【TestFixture】等测试标识,引入using NUnit.Framework;
TestStack.White作用是封装了识别应用程序和控件的方法。
using TestStack.White; using TestStack.White.Factory; using TestStack.White.UIItems.WindowItems; using TestStack.White.UIItems; using TestStack.White.UIItems.Finders; using NUnit.Framework; namespace myProject01 { [TestFixture] class Program { static Application posApp; [SetUp] public void setUp() { posApp = Application.Launch(@"xxxx.exe"); Console.WriteLine("setup"); } [TearDown] public void tearDown() { posApp.Close(); Console.WriteLine("teardown"); } //项目执行需要有main函数,此处先和在这里,没有实际作用,为了编译通过。。。 static void Main(string[] args) { } [Test] public void testcase_login() { Window posWindow = posApp.GetWindow("登录", InitializeOption.NoCache); TextBox usertext = posWindow.Get<TextBox>(SearchCriteria.ByAutomationId("txt_no")); usertext.SetValue("0114"); }
打开【测试】-【窗口】-测试资源管理器;在解决方案右键->生成解决方案;
四、测试固件
【TestFixture】:
用在class前面,表示该类包含测试,此类必须是public的
【Test】
表示该函数为一个testcase
【SetUp】【TearDown】:
测试固件前置条件和后置条件,作用于每个testcase
【TestFixtureSetUp】【TestFixtureTearDown】
测试固件前置条件和后置条件,作用于每个【TestFixture】
【ExpectedException】 :
用例预期会抛出Exception,如果没有抛用例就会失败。比如用任何数除以0会得到DivideByZeroException,这时可以在TestCase前面加上ExpectedException
[Test] [ExpectedException("System.DivideByZeroException")] public void testException() { int zero = 0 ; int number = 2 / zero; }
【Explicit】
执行全部用例时会忽略执行,单独选中该testcase可以执行
【Ignore】
忽略执行,即使单独执行也不可以
五、控件识别
【TextBox】
TextBox usertext = posWindow.Get<TextBox>(SearchCriteria.ByAutomationId("txt_no"));
usertext.SetValue("0114");
【Button】
var button = posWindow.Get<Button>("btn_login");
button.Click();
[Label]
classname为Text的可使用Label,一般为点击文字事件的。
var serverSet = posWindow.Get<Label>(SearchCriteria.ByAutomationId("lbl_chgServer"));
serverSet.Click();
【自定义类】
添加引用,引入自定义的ClassLibrary2.dll
using BaseTest;
BaseClass.ClickLeftMouse(processId, "CtrButtonCon5");
六、Assert断言
Assert.AreEqual(expectedResult, actualResult);
Assert 类包含 AreEqual,AreSame,Equals, Fail,IsFalse,IsNotNull ..等方法。