Ваши тесты до сих пор выглядят так, как будто вы на правильном пути.Если ваши тесты кажутся очевидными, это хорошо.Они там, чтобы обеспечить ожидаемое поведение.Если через несколько месяцев вы забыли о Emailer
, но изменили EmailerService
, чтобы выдать исключение при ошибке, вместо возврата false, ваши тесты напомнят вам, что Emailer
ожидает другое поведение и нуждается в обновлении.
При написании модульных тестов я всегда делаю две вещи перед любой реализацией: 1) пишу четкое имя функции теста и делю метод на три компонента Arrange, Act, Assert .Это помогает мне сохранять ясность своих ожиданий от теста и гарантировать, что я ничего не забываю.
Кажется, что вы забыли включить часть теста Assert :
[TestMethod]
public void Emailer_IsCalled_SendEmailIsCalled()
{
//Arrange
var emailerService = MockRepository.GenerateMock<IEmailerService>();
emailerServie.Expect(x => x.SendEmail("", "")).IgnoreArguments().Return(true).Repeat.Any();
//Act
var emailer = new Emailer(emailerService);
emailer.SendBatchEmails();
//Assert
emailer.VerifyAllExpectations();
}
Во втором тесте кажется, что вы хотите проверить, что в случае сбоя SendEmail
выдается исключение.В этом случае emailerService
лучше подходит как заглушка:
[TestMethod, ExpectedException(typeof(Exception))]
public void Emailer_SendEmailReturnsFalse_ThrowException()
{
//Arrange
var emailerService = MockRepository.GenerateStub<IEmailerService>();
emailerServie.Stub(x => x.SendEmail("", "")).IgnoreArguments().Return(false);
//Act
var emailer = new Emailer(emailerService);
emailer.SendBatchEmails();
//Assert
//Expect Exception
/* Even when I don't have and assert call here, I usually leave a note*/
}