私は本当に1つのアクションが発生するたびに通知メールを送信するメソッドをテストしようとしています。このメソッドのパラメータのほとんどはハードコードされています。メールテンプレートのように、パラメータの件名、見出し、本文があります。私のメソッドのパラメータは、テンプレート生成のためのuserMailId、adminNameおよびControllerContextです。C#のユニットテストのvoidメソッド?
マイコード
ます。public voidのSendMail(ControllerContext、管理者、ユーザリスト) { が { VAR templatePath = String.Emptyをしてみてください。 var subject = string.Empty; var viewModel =新しいEmailModel();
switch (pathid)
{
case 0:
if (pathId == 3)
templatePath = "AllCategoryTemplate";
else
templatePath = "SpecificTemplate";
break;
case 1:
templatePath = "AllTemplate";
break;
case 2:
templatePath = "CategoryTemplate";
break;
}
switch (urlId)
{
case 1:
viewModel.ItemUrl = "itemurl";
break;
case 2:
viewModel.ItemUrl = "itemurl1";
break;
case 3:
viewModel.ItemUrl = "itemurl2";
break;
default:
viewModel.ItemUrl = "itemurl23";
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)
{
LogExtension.LogError("Error in sending notification email", ex, MethodBase.GetCurrentMethod());
}
}
コードを掲載することはできますか? Microsoft Visual Studioのエディションはありますか? – zaitsman
このメソッドを含むクラスが正しく設計されていません。単体テストでは実際に電子メールを送信したくないのです。しかし、テンプレートの生成をテストする必要があります。あなたはそれらを別々のクラスに分けたいと思っています。 – Wazner
@ワーズナーそれは必ずしも正しいとは限りません。 Microsoft Fakesで読む。あなたはテンプレートを生成し、電子メールを送信することができますし、単体テストでは、電子メールクライアントにシムとボイラーを代用します。 – zaitsman