You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# Windows Forms项目中点击按钮运行XUnit测试项目Example2?

WinForms按钮运行XUnit测试实现方案

1. 安装必要NuGet包

在WinForms项目中通过NuGet包管理器安装:

  • xunit.runner.utility:提供程序化运行XUnit测试的API
  • xunit:版本需与Example2测试项目保持一致

2. 添加测试项目引用

右键WinForms项目 → 选择添加 → 项目引用 → 勾选Example2测试项目,点击确定。

3. 编写按钮点击事件逻辑

打开窗体代码文件,为按钮的Click事件添加以下代码(记得替换Example2.YourTestClass为你测试项目中的实际类):

using Xunit.Runner.Common;
using Xunit.Sdk;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows.Forms;

private async void btnRunTests_Click(object sender, EventArgs e)
{
    var resultLogs = new List<string>();
    // 获取测试项目程序集路径
    var testAssemblyPath = typeof(Example2.YourTestClass).Assembly.Location;

    // 初始化XUnit前端控制器
    using var controller = new XunitFrontController(AppDomainSupport.Denied, testAssemblyPath);

    // 发现所有测试用例
    var discoveryOptions = TestFrameworkOptions.ForDiscovery();
    var testCases = await controller.DiscoverAsync(discoveryOptions, TestMessageSink.Create());

    // 配置测试执行接收器,监听结果
    var executionSink = new TestMessageSink();
    executionSink.MessageEvent += (_, args) =>
    {
        switch (args.Message)
        {
            case TestPassedMessage passed:
                resultLogs.Add($"✅ {passed.TestDisplayName}");
                break;
            case TestFailedMessage failed:
                resultLogs.Add($"❌ {failed.TestDisplayName}\n错误信息: {failed.Message}");
                break;
            case TestSkippedMessage skipped:
                resultLogs.Add($"⚠️ {skipped.TestDisplayName}\n跳过原因: {skipped.Reason}");
                break;
        }
    };

    // 执行测试
    var executionOptions = TestFrameworkOptions.ForExecution();
    await controller.RunAsync(testCases, executionOptions, executionSink);

    // 弹出结果窗口
    var resultText = string.Join("\n\n", resultLogs);
    MessageBox.Show(resultText, "测试结果", MessageBoxButtons.OK, 
        resultLogs.Any(log => log.StartsWith("❌")) ? MessageBoxIcon.Error : MessageBoxIcon.Information);
}

4. 关键注意事项

  • 确保WinForms项目与Example2测试项目的.NET目标框架版本一致,避免兼容性错误。
  • 如果测试项目依赖其他工具包(如Moq、AutoFixture),WinForms项目需同步安装对应NuGet包。
  • 使用async/await避免测试执行时UI线程阻塞导致界面假死。

内容的提问来源于stack exchange,提问作者Pablo Ricardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:45:49