如何测试单元测试中是否显示消息框?
How do I test did a message box shows up or not in unit testing?
我想测试一下,当我的代码请求时,消息框会出现吗?但我不太确定该断言什么,或者我什至在做正确的事。
public void btnSave_Click(object sender, EventArgs e)
{
if(txtFirstName.Text.Trim() != "" && txtLastName.Text.Trim() != "" && txtContact.Text.Trim() != "")
{
Regex reg = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"); // Only accepting proper email
Match match = reg.Match(txtEmail.Text.Trim());
if (match.Success)
{ using (SqlConnection sqlCon = new SqlConnection(connectionString)) // Connecting info to database
{
sqlCon.Open();
SqlCommand sqlCmd = new SqlCommand("ContactAddorEdit", sqlCon);
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.AddWithValue("@PhoneBookID", PhoneBookID); //connecting each value to database
sqlCmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text.Trim());
sqlCmd.Parameters.AddWithValue("@LastName", txtLastName.Text.Trim());
sqlCmd.Parameters.AddWithValue("@Contact", txtContact.Text.Trim());
sqlCmd.Parameters.AddWithValue("@Email", txtEmail.Text.Trim());
sqlCmd.Parameters.AddWithValue("@Address", txtAddress.Text.Trim());
sqlCmd.ExecuteNonQuery(); // Executing the query in database
MessageBox.Show("Submitted successfully"); // Showing message when success
Clear(); // Clearing the form
GridFill();// Refreshing the table
}
}
else
{
MessageBox.Show(" Please enter a valid Email"); // Showing message when email is not valid
}
}
else
{
MessageBox.Show("Please fill Mandatory fields"); // If no input this message will show
}
}
因此,如果文本框得到一个空字符串,则会弹出一个消息框并显示 "Please fill Mandatory fields"
这是我正在尝试编写的测试
[TestMethod]
public void TestMethod1()
{
Form1 form1 = new Form1();
form1.txtFirstName.Text = "";
Assert.IsTrue(MessageBox.Show("Please fill Mandatory fields") ;
}
应该使用什么样的断言,我该如何编写?我可以这样测试吗?谢谢
您不使用单元测试来测试用户界面。它们用于测试逻辑。单元测试无法单击按钮(当您的消息框弹出时谁或什么会单击“确定”以便测试可以完成?)有 UI 个测试框架可以。
想想你要在这里测试什么。 Test1 正在测试表单是否会正确检查必填字段是否已填写。为该逻辑创建一个方法,并对其进行单元测试:
public bool MandatoryFieldsArePopulated()
{
return txtFirstName.Text.Trim() != ""
&& txtLastName.Text.Trim() != ""
&& txtContact.Text.Trim() != "";
}
这可以很容易地通过单元测试进行测试。然后 btnSave_Click
方法的第一行将是
if (MandatoryFieldsArePopulated())
像这样构建代码不仅可以让您单独测试逻辑单元,还可以使代码更清晰易读。
我想测试一下,当我的代码请求时,消息框会出现吗?但我不太确定该断言什么,或者我什至在做正确的事。
public void btnSave_Click(object sender, EventArgs e)
{
if(txtFirstName.Text.Trim() != "" && txtLastName.Text.Trim() != "" && txtContact.Text.Trim() != "")
{
Regex reg = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"); // Only accepting proper email
Match match = reg.Match(txtEmail.Text.Trim());
if (match.Success)
{ using (SqlConnection sqlCon = new SqlConnection(connectionString)) // Connecting info to database
{
sqlCon.Open();
SqlCommand sqlCmd = new SqlCommand("ContactAddorEdit", sqlCon);
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.AddWithValue("@PhoneBookID", PhoneBookID); //connecting each value to database
sqlCmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text.Trim());
sqlCmd.Parameters.AddWithValue("@LastName", txtLastName.Text.Trim());
sqlCmd.Parameters.AddWithValue("@Contact", txtContact.Text.Trim());
sqlCmd.Parameters.AddWithValue("@Email", txtEmail.Text.Trim());
sqlCmd.Parameters.AddWithValue("@Address", txtAddress.Text.Trim());
sqlCmd.ExecuteNonQuery(); // Executing the query in database
MessageBox.Show("Submitted successfully"); // Showing message when success
Clear(); // Clearing the form
GridFill();// Refreshing the table
}
}
else
{
MessageBox.Show(" Please enter a valid Email"); // Showing message when email is not valid
}
}
else
{
MessageBox.Show("Please fill Mandatory fields"); // If no input this message will show
}
}
因此,如果文本框得到一个空字符串,则会弹出一个消息框并显示 "Please fill Mandatory fields"
这是我正在尝试编写的测试
[TestMethod]
public void TestMethod1()
{
Form1 form1 = new Form1();
form1.txtFirstName.Text = "";
Assert.IsTrue(MessageBox.Show("Please fill Mandatory fields") ;
}
应该使用什么样的断言,我该如何编写?我可以这样测试吗?谢谢
您不使用单元测试来测试用户界面。它们用于测试逻辑。单元测试无法单击按钮(当您的消息框弹出时谁或什么会单击“确定”以便测试可以完成?)有 UI 个测试框架可以。
想想你要在这里测试什么。 Test1 正在测试表单是否会正确检查必填字段是否已填写。为该逻辑创建一个方法,并对其进行单元测试:
public bool MandatoryFieldsArePopulated()
{
return txtFirstName.Text.Trim() != ""
&& txtLastName.Text.Trim() != ""
&& txtContact.Text.Trim() != "";
}
这可以很容易地通过单元测试进行测试。然后 btnSave_Click
方法的第一行将是
if (MandatoryFieldsArePopulated())
像这样构建代码不仅可以让您单独测试逻辑单元,还可以使代码更清晰易读。