c# - 如何使 Application.Run() 可测试

标签 c# winforms system-testing

我目前正在为遗留 Windows 窗体应用程序编写系统测试。

在我的测试中,我调用了 Program.Main() 方法,该方法在某个时候又调用了 Application.Run(new MainForm());

有没有办法用我可以控制的东西替换 Application.Run()?

具体来说,我需要能够停止执行并捕获未处理的异常。

最佳答案

您可以修改 Program.Main 以接受表单作为输入参数,默认值为 MainForm。引用类型不能有非空默认值,但我们可以通过使用两个原型(prototype)来完成同样的事情:

class Program
{
    //Normal entry point
    static public void Main()
    {
        Main(new MainForm());
    }

    //Internal & test entry point
    static public void Main(Form form)
    {
        DoSomeSetup();
        Application.Run(form);
    }
}

当您以正常方式运行程序时,它将使用 MainForm

但是当你从你的测试项目中运行它时,你可以这样调用它:

Program.Main(new FormICanControl());

然后你就可以控制它了。

//Arrange
var t = new TestForm();

//Act
Program.Main(t);
t.ExecuteSomeTest();

//Assert
Assert.AreEqual(t.ResultCode, 0, "Test failed.");

关于c# - 如何使 Application.Run() 可测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45956457/

相关文章:

.net - 我可以在控件内托管 Windows 窗体吗

c# - 如何将 postsharp 方面应用于网站项目?

c# - 从 .net 代码运行 sql server 作业

c# - 异步方法恢复后值未更新

unit-testing - 您如何用两种流行且看似矛盾的解释来定义功能测试?

testing - 在自己的文件中定义测试参数

vb.net - vb.net 项目的单元测试

c# - windows phone 8.1 如何制作确定的圆形进度条

c# - ASP.NET MVC AntiForgeryToken 和 AdSense 爬虫登录

c# - 如何设置组合框默认值?