私は電子メールサービス(SMTPを使用して)のために書いたユニットテストを見ていますが、特に1つのテストで十分かどうか疑問に思っています。ここに私の電子メールサービスの抜粋です:ユニットテストは十分ですか?
[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にテストモードを設定しています。
[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();
}
が、これはユニットテストのために十分に十分なものである:だから、私のユニットテストは、この(これは方法の私のユニットテストの一つであり、私は100%のコードカバレッジを持っている)のようになりますか?それを改善するために私は何ができますか?
私の方法が真実に戻っているかどうかをチェックするだけでは、単体テストでは十分ではないと懸念しています。
多くの人がコードカバレッジは良いテストの大きな兆候ではないと言うでしょうが、特にコードカバレッジが2%の場合は、明らかに長い道のりです。 コードカバレッジを初めて使用している場合は、98%になり、最後の例外がすべて発生する心配はありません。 ちょうど私の2セントです。 –
アレン - 電子メールサービスで100%カバーしています。私は私の単体テストが十分であるかどうかを見たいと思っています... –
100%の機能範囲と適切な分岐範囲が良い指標になるはずです:) – workmad3