在同一解决方案下创立单元测试项目
这个步骤可以看微软官方文档中的创立单元测试部分
需要注意的是:
- 在创建测试项目时,我添加的是单元测试项目(.NET framework)。
- 在将待测项目添加到测试项目的引用中之后,还需要添加引用项:System.Windows.Forms。否则在测试项目中无法使用winforms控件。
编写测试用例
单元测试项目(.NET framework)的结构与.NET framework项目的结构较为相似,大致是:
- 项目命名空间
- 测试类
- 测试方法
- 测试类
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using WindowsFormsApp1;
using System.Windows.Forms;
using System.Reflection.Emit;namespace UnitTestProject1
{[TestClass]public class UnitTest1{[TestMethod]public void TestButtonMethod(){// ArrangeForm1 form = new Form1();form.Show();// 获取按钮和标签var button = form.Controls["button1"] as Button;var textBox = form.Controls["textBox1"] as TextBox;// 确保控件不为空并且是正确类型if (button != null && textBox != null){// 模拟按钮点击button.PerformClick();// 验证标签文本是否已更改Assert.AreEqual("Hello World", textBox.Text);}else{Assert.Fail("Button or textBox not found.");}}}
}
编写测试用例主要就是定义不同的测试方法。
需要注意的是:
- 在写单元测试的.cs文件里不仅要写
using WindowsFormsApp1(待测项目namespace);
,也要写using System.Windows.Forms;
。 - 在 WinForms 中,如果是在视图界面拖拽到窗体上的控件,其声明自动生成在Designer.cs文件里,一般为
private
类型。这时就不能直接在测试项目中访问。而通过form.Controls["button1"]
就可以成功获取控件。 var button = form.Controls["button1"] as Button;
这是一个类型转换的语法,利用了 as 关键字。as 是 C# 中的一个操作符,用于将对象转换为指定类型。如果转换成功,则返回目标类型的实例;如果转换失败,则返回 null,而不会抛出异常。
运行单元测试
这个步骤可以看微软官方文档中的运行单元测试部分