Модульное тестирование отправки почты с почтой и минимальным заказомC#

Место общения программистов C#
Ответить
Anonymous
 Модульное тестирование отправки почты с почтой и минимальным заказом

Сообщение Anonymous »

Код: Выделить всё

System.ArgumentNullException
выдается из конструктора System.Web.HttpBrowserCapabilities при вызове mail.Send() из теста. Для этого требуется параметр httpBrowserCapabilities.

Код, который я использовал:

EmailModel:

Код: Выделить всё

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(".+@.+", 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; }
}
Просмотр сообщения:

Код: Выделить всё

@model *******.Models.EmailModel
@{
Layout = null;
}
To: @Model.To
Subject: @Model.Topic

The massage from @Model.Name @Model.Email
Massage text:
@Model.Massage
UnitTest:

Код: Выделить всё

public class EmailSetter
{
public const string DefaultName = "NameTest";
public const string DefaultEmail = "EmailTest@domaintest.test";
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 email = new Mock();
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());
}
}
Контроллер из теста:

Код: Выделить всё

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Contact(EmailModel emailModel)
{
if(ModelState.IsValid)
{
ViewBag.Send = true;
emailModel.Send();
ModelState.Clear();
}
return View(emailModel);
}
Что я пробовал (в методе модульного тестирования):
  • создание новых HttpBrowserCapabilities через new
    BrowserCapabilitiesFactory
  • создание новых
    HttpBrowserCapabilitiesWrapper с объектом HttpBrowserCapabilities
Есть идеи, как заставить код не генерировать исключение? (т. е. заставить текущий HttpBrowserCapabilitiesWrapper получать существующие HttpBrowserCapabilities) :)

Подробнее здесь: https://stackoverflow.com/questions/403 ... al-and-moq
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»