Я смотрю на модульные тесты, которые я написал для почтовой службы (используя SMTP), и мне интересно, достаточно ли одного конкретного теста. Вот фрагмент моего почтового сервиса:
[PluginFamily("EmailService")]
public interface IEmailService
{
Boolean SendEmail( string toAddress, string fromAddress, string bccAddress, string ccAddress, string subject,
string body, bool html );
}
[Pluggable("EmailService")]
public class EmailService : IEmailService
{
private IConfigurationReader _configReader;
public EmailService(IConfigurationReader configurationReader)
{
_configReader = configurationReader;
}
public bool SendEmail( string toAddress, string fromAddress, string bccAddress, string ccAddress, string subject, string body, bool isHtml )
{
MailMessage email = new MailMessage();
try
{
if (_configReader.TestMode)
{
toAddress = _configReader.TestEmailAddress;
}
}
//send email here
}
}
Я прикалываюсь к IConfigurationReader (в основном это оболочка для ConfigurationManager) и задаю для режима тестирования значение true, чтобы проверить, могу ли я отправить электронное письмо в своем «режиме тестирования». Итак, мой модульный тест выглядит примерно так (это один из моих модульных тестов по методу. У меня 100% охват кода):
[Test]
public void Validate_Send_Email_In_Test_Mode()
{
bool result;
MockRepository mockRepository = new MockRepository();
var mockConfigReader = mockRepository.StrictMock<IConfigurationReader>();
using (mockRepository.Record())
{
SetupResult.For(mockConfigReader.TestMode).Return(true);
SetupResult.For(mockConfigReader.TestEmailAddress).Return("test@test.com");
SetupResult.For(mockConfigReader.EmailContentLocation).Return("test");
SetupResult.For( mockConfigReader.SmtpHost ).Return( "test.mail.com" );
}
ObjectFactory.InjectStub(typeof(IConfigurationReader), mockConfigReader);
emailService = ObjectFactory.GetInstance<IEmailService>();
using (mockRepository.Playback())
{
result = emailService.SendEmail( "testemail@test.com",
"test@test.com", "", "",
"this is a unit test - config in test mode", "body of unit test", true );
}
Assert.That( result, Is.True );
ObjectFactory.ResetDefaults();
}
Достаточно ли этого для юнит-теста? Что я могу сделать, чтобы улучшить его?
Я обеспокоен тем, что просто проверка того, что мой метод возвращает true, не является достаточным модульным тестом.