メールを送信せずにBatchProcessに存在するSendMailメソッドのNunitまたはユニットテストを記述したいと思います。ユニットテストのために関数内で使用されるSmtpClientオブジェクトをモックする方法
他の方法の中にあるSmtpClientをモックする方法。助けてください。
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
//Assuming we are populating the emails from the data from database
List<EmailEntity> emails = new List<EmailEntity>();
BatchProcess.SendMail(emails);
}
}
public class EmailEntity
{
public string ToAddress { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
}
public class BatchProcess
{
public static void SendMail(List<EmailEntity> emails)
{
foreach (EmailEntity email in emails)
{
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("sampleSmtp.sampleTest.com");
mail.From = new MailAddress("[email protected]");
mail.To.Add(email.ToAddress);
mail.Subject = email.Subject;
mail.Body = email.Body;
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password");
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
}
}
}
}
あなたは、インタフェースISmtpClientの後ろにそれを置くことができます:それはあなたがテストでそれを模擬することができるように
ISmtpClient
インタフェースを実装SmtpClient
の上にラッパーを定義し、BatchProcess
のコンストラクタにそのインターフェイスを渡す方が良いでしょう。 – lloydあなたのコードは実装に関する懸案事項と緊密に結びついており、これを単独でテストするのは難しいです。柔軟性を高める抽象レイヤーが必要です。コメントに記載されているコードを変更/リファクタリングできない場合は、実際のSmtpサービスにヒットする統合テストを実行する必要があります。 – Nkosi
[Typemock Isolator](https://www.typemock.com/docs)を使用することができます。しかし、何を試そうとしていますか? – Sam