Я изучаю тесты устройств, которые я написал для службы электронной почты (используя 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) и установить режим тестирования для истинно для того, чтобы проверить, могу ли я отправить по электронной почте в моем «тестовом режиме» , Так что мое модульное тестирование выглядит следующим образом (это одна из моих модульных тестов по методу У меня есть 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("[email protected]");
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("[email protected]",
"[email protected]", "", "",
"this is a unit test - config in test mode", "body of unit test", true);
}
Assert.That(result, Is.True);
ObjectFactory.ResetDefaults();
}
достаточно ли этого достаточно для модульного тестирования? Что я могу сделать, чтобы улучшить его?
Я обеспокоен тем, что просто проверка того, что мой метод возвращает true, не является достаточным модульным тестом.
Многие люди скажут, что покрытие кода не является отличным признаком хороших тестов, но, безусловно, это долгий путь, особенно если коэффициент покрытия кода составляет 2%. Если вы новичок в области покрытия кода, доходите до 98% и не беспокойтесь о том, чтобы бросать каждое последнее исключение. Только мои 2 цента. –
Аллен - у меня есть 100% покрытие на почтовом сервисе. Наверное, я смотрю, достаточно ли достаточного моего тестового теста ... –
100% -ый охват функций и прилично высокий охват филиалов должны быть хорошим показателем :) – workmad3