尝试测试在发生一个操作时发送电子邮件的void方法。此方法内部的大多数参数都是硬编码的。根据交换机案例,邮件主题也会发生变化。
public void SendMail(ControllerContext, admin, userList)
{
try
{
var templatePath = string.Empty;
switch (pathid)
{
case 1:
templatePath = "XXX";
default:
break;
}
switch (urlId)
{
case 1:
viewModel.ItemUrl = "URL";
break;
default:
break;
}
foreach (var user in userList)
{
viewModel.FirstName = user.FirstName;
viewModel.LastName = user.LastName;
string bodyOftheContent = Generator.TemplateGeneration(ControllerContext, tempatePath);
Object.SendCustomMail(user.Email, bodyOftheContent, subject);
}
}
catch (Exception ex)
{
LogError("Error in sending notification email", ex, MethodBase.GetCurrentMethod());
}
}
单元测试void方法的任何可能方法都有很多硬编码值
答案 0 :(得分:1)
您无法对void方法进行单元测试,但您可以将void方法作为单元测试的一部分,以查看是否在类属性,提供的输入文档或数据库中的记录中发生了所需的变异。
即
public class SimpleEmailTest
{
private int _sentEmails;
public SimpleEmailTest()
{
this._sentEmails = 0;
}
[TestMethod]
public void TestIfEmailsGetSent()
{
SendEmail();
Assert.IsTrue(_sentEmails == 1);
}
public void SendEmail
{
// do email sending
_sentEmails++;
}
}