单元测试C#中的void方法?

时间:2016-12-27 10:13:53

标签: c# unit-testing

尝试测试在发生一个操作时发送电子邮件的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方法的任何可能方法都有很多硬编码值

1 个答案:

答案 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++;
   }
}