首页 > 解决方案 > 我们如何在我已经内置私有方法的 Windows 窗体 c# 中进行单元测试

问题描述

private void name_KeyPress(object sender, KeyPressEventArgs e)
{
     char ch = e.KeyChar;
     if (!char.IsLetter (ch) && (ch != 8))
     {
         e.Handled = true;
     } 
}

1.部分代码。如何对这段代码进行单元测试

public int validation()
{
    int flag = 0;
    Regex Rx = new Regex(@"^[\p{L} \.'\-]{0,20}$");
    Regex Rx1 = new Regex(@"^[\p{L} \.'\-]{0,20}$");
    Regex Rx2 = new Regex(@"^[0-9]{10}$");
    if (name.Text=="")
    {
         name.Focus();
         errorProvider1.SetError(name, MessageBox.Show("enter your name", "error", MessageBoxButtons.OK, MessageBoxIcon.Error).ToString());
         flag = 1;
    }
    else if (fathername.Text == "")
    {
        fathername.Focus();
        errorProvider1.SetError(name, MessageBox.Show("Enter your father name", "error", MessageBoxButtons.OK, MessageBoxIcon.Error).ToString());
        flag = 1;
    }
}

它是一种公共方法

标签: c#.netformswinformsunit-testing

解决方案


代码背后和单元测试:

要回答您的问题,理想情况下,您不应使用单元测试来测试文件后面的 UI 代码。这将由自动化测试框架来处理。

您还应该使用 MVVM 等框架来保持文件背后的代码干净,这将有助于提高代码的整体可维护性和可测试性。

非代码隐藏类和私有方法

理想情况下,您不需要显式测试私有方法,因为它们应该通过类的一些公共方法来调用。因此,如果公共方法的所有控制流都经过单元测试,那么您不需要为私有方法编写单元测试。

以下是一些可能对您有用的提示。

提示 1:InternalsVisibleTo 程序集属性:

如果您在程序集中指定此属性,则使用此属性内部方法/内部类。UnitTestAssembly 是您的单元测试所在的程序集。仅当完成单元测试程序集的强命名时,才需要公钥令牌。

[assembly: InternalsVisibleTo("UnitTestAssembly, PublicKey=002400000...")]

提示 2:PrivateObject 仅适用于 MSTest 框架:

您可以使用私有对象来获取对象的私有字段属性。您可以在此处参考文档。这仅在您使用 MSTest 单元测试框架时适用。


推荐阅读