使用msTest对winforms项目进行单元测试

在同一解决方案下创立单元测试项目

这个步骤可以看微软官方文档中的创立单元测试部分

需要注意的是:

  • 在创建测试项目时,我添加的是单元测试项目(.NET framework)。这样建立出来的项目会自动包含两个引用MSTest.TestAdapterMSTest.TestFramework
  • 在将待测项目添加到测试项目UnitTestProject1的引用中之后,还需要添加引用项:System.Windows.Forms。否则在测试项目中无法使用winforms控件。
  • 所以测试项目中至少要有四个引用才能成功测试MSTest.TestAdapterMSTest.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,而不会抛出异常。

运行单元测试

这个步骤可以看微软官方文档中的运行单元测试部分

posted @   ban_boi  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示