System.ArgumentNullException
從System.Web.HttpBrowserCapabilities
構造函數時拋出mail.Send()
從測試調用。它需要httpBrowserCapabilities
參數。單元測試的郵件與郵政發送和最小起訂量
代碼我已經使用:
EmailModel:從測試
public class EmailSetter
{
public const string DefaultName = "NameTest";
public const string DefaultEmail = "[email protected]";
public const string DefaultTopic = "TopicTest";
public const string DefaultMassage = "Massage test.";
public EmailModel GetEmail(string Name = DefaultName, string Topic = DefaultTopic, string Email = DefaultEmail, string Massage = DefaultMassage)
{
EmailModel email = new EmailModel();
email.Name = Name;
email.Topic = Topic;
email.Email = Email;
email.Massage = Massage;
return email;
}
}
[TestClass]
public class MailTests
{
[TestMethod]
public void MailSendWithRightModel()
{
//Arrange
HomeController controller = new HomeController();
Mock<EmailModel> email = new Mock<EmailModel>();
email.Object.Name = EmailSetter.DefaultName;
email.Object.Email = EmailSetter.DefaultName;
email.Object.Topic = EmailSetter.DefaultTopic;
email.Object.Massage = EmailSetter.DefaultMassage;
//Act
controller.Contact(email.Object);
//Assert
email.Verify(mail => mail.Send());
}
}
控制器::
@model *******.Models.EmailModel
@{
Layout = null;
}
To: @Model.To
Subject: @Model.Topic
The massage from @Model.Name @Model.Email
Massage text:
@Model.Massage
單元測試:
public class EmailModel :Email
{
public EmailModel() :base("EmailModel")
{
}
public string To = "**********@gmail.com";
[Display(ResourceType = typeof(Resource), Name = "Name")]
[Required(ErrorMessageResourceName = "Error_NameRequired", ErrorMessageResourceType = typeof(Resource))]
public string Name { get; set; }
[DataType(DataType.EmailAddress)]
[Display(ResourceType = typeof (Resource), Name = "Email")]
[Required(ErrorMessageResourceName = "Error_EmailRequired", ErrorMessageResourceType = typeof(Resource))]
[RegularExpression("[email protected]+", ErrorMessageResourceName = "Error_EmailWrong", ErrorMessageResourceType = typeof(Resource))]
public string Email { get; set; }
[Display(ResourceType = typeof(Resource), Name = "Topic")]
[Required(ErrorMessageResourceName = "Error_TopicRequired", ErrorMessageResourceType = typeof(Resource))]
public string Topic { get; set; }
[Display(ResourceType = typeof(Resource), Name = "Massage")]
[DataType(DataType.MultilineText)]
[Required(ErrorMessageResourceName = "Error_MassageRequired", ErrorMessageResourceType = typeof(Resource))]
public string Massage { get; set; }
}
消息的查看
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Contact(EmailModel emailModel)
{
if(ModelState.IsValid)
{
ViewBag.Send = true;
emailModel.Send();
ModelState.Clear();
}
return View(emailModel);
}
我曾嘗試(在單元測試方法):
創建
new HttpBrowserCapabilities
通過new BrowserCapabilitiesFactory
創建
new HttpBrowserCapabilitiesWrapper
與HttpBrowserCapabilities
對象
任何想法如何使代碼不會丟失例外? (即讓電流HttpBrowserCapabilitiesWrapper可獲得現有的HttpBrowserCapabilities):)
您已經做了幾個聲明。但你的問題是什麼? – Jasen
你是想發送一封真正的電子郵件(集成測試),還是試圖模擬發送電子郵件?很可能電子郵件正在嘗試發送電子郵件,但沒有爲測試配置適當的依賴關係。 – Nkosi
我想測試是否將調用發送方法,如果正確的模型被給予控制器。我也認爲這個問題出現在正常應用程序啓動時創建的依賴中。 –