使用msTest对winforms项目进行单元测试
在同一解决方案下创立单元测试项目
这个步骤可以看微软官方文档中的创立单元测试部分
需要注意的是:
- 在创建测试项目时,我添加的是单元测试项目(.NET framework)。这样建立出来的项目会自动包含两个引用
MSTest.TestAdapter
和MSTest.TestFramework
- 在将待测项目添加到测试项目
UnitTestProject1
的引用中之后,还需要添加引用项:System.Windows.Forms
。否则在测试项目中无法使用winforms控件。 - 所以测试项目中至少要有四个引用才能成功测试
MSTest.TestAdapter
、MSTest.TestFramework
、待测试项目
和System.Windows.Forms
。
编写测试用例
单元测试项目(.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()
{
// Arrange
Form1 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,而不会抛出异常。
运行单元测试
这个步骤可以看微软官方文档中的运行单元测试部分
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!