c# - 我们如何在我已经内置私有方法的 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;
}
}
它是一种公共方法
解决方案
代码背后和单元测试:
要回答您的问题,理想情况下,您不应使用单元测试来测试文件后面的 UI 代码。这将由自动化测试框架来处理。
您还应该使用 MVVM 等框架来保持文件背后的代码干净,这将有助于提高代码的整体可维护性和可测试性。
非代码隐藏类和私有方法
理想情况下,您不需要显式测试私有方法,因为它们应该通过类的一些公共方法来调用。因此,如果公共方法的所有控制流都经过单元测试,那么您不需要为私有方法编写单元测试。
以下是一些可能对您有用的提示。
提示 1:InternalsVisibleTo 程序集属性:
如果您在程序集中指定此属性,则使用此属性内部方法/内部类。UnitTestAssembly 是您的单元测试所在的程序集。仅当完成单元测试程序集的强命名时,才需要公钥令牌。
[assembly: InternalsVisibleTo("UnitTestAssembly, PublicKey=002400000...")]
提示 2:PrivateObject 仅适用于 MSTest 框架:
您可以使用私有对象来获取对象的私有字段属性。您可以在此处参考文档。这仅在您使用 MSTest 单元测试框架时适用。
推荐阅读
- azure - 管道使用相同的 yaml 但部署到不同的订阅
- xml - 如何使用 XSLT 检查 XML 在不同节点中是否具有相同的值?
- node.js - sh: 1: node-gyp-build: Permission denied and npm ERR! 代码 ELIFECYCLE npm 错误!错误号 126
- reactjs - 当我连接另一台电脑时,React App 出现错误
- postgresql - 如何在 sql 中创建基本循环计算以避免执行 200 多个连接
- mongodb - MongoDb:无法优化管道:原因:无法从 BSON 类型 javascript 转换为 Date
- python - 无法使用 httpclientlibrary 在 lambda 函数中发送电子邮件
- django - 在 Django 模板中渲染熊猫的数据框
- nuxt.js - Vercel 上的 NUXT SSR(现在是时代)。如何部署?
- swiftui - SwiftUI:如何初始化依赖于视图中另一个变量的变量