Arl*_*len 7 unit-testing assert
在这个单元测试中是否有太多断言?
[Fact]
public void Send_sends_an_email_message() {
using (var server = new MockSmtpServer()) {
server.Start();
using (var client = new EmailClient("localhost")) {
string from = "john.doe@example.com";
IEnumerable<string> to = new[] { "jane.doe@example.com" };
string subject = "Test";
string body = "Test.";
client.Send(from, to, subject, body);
var session = server.Sessions.FirstOrDefault();
Assert.NotNull(session);
var message = session.Messages.FirstOrDefault();
Assert.NotNull(message);
Assert.NotNull(message.From);
Assert.Equal(message.From.Address, "john.doe@example.com");
Assert.NotNull(message.To);
var recipient = message.To.FirstOrDefault();
Assert.NotNull(recipient);
Assert.Equal(recipient.Address, "jane.doe@example.com");
Assert.Equal(message.Subject, "Test");
Assert.Equal(message.Body, "Test.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不认为此代码需要任何解释,但如果确实如此,请告诉我.
我试着保持我的UnitTests相当小,一次测试一件事.所以我可能会将不同的部分测试到单独的测试中,例如
sendWillSendAnEmail, fromContainsSenderAddress, toContainsRecipientAddress, mailBodyContainsMailMessage, mailContainsSubject我觉得它太大了.
当你有一堆较小的测试时,你可以获得"缺陷本地化" - 只需运行所有测试,你就可以确切地看到问题所在.由于您拥有尽可能多的断言(并且没有断言消息),您可能必须启动调试器才能找到答案.请记住,您可能最终会有数百个(如果不是数千个)测试,如果其中一组测试失败,您不需要调试每个测试以查看原因.
此外,任何断言在测试早期失败意味着后面的断言不会运行.当它们被分成单独的测试时,每个断言都会被检查.这是一种权衡; 很多这些断言可能是相关的并且会同时失败,所以你将有五个红色测试而不是一个.但我的前提是更多的信息更好,所以我宁愿进行这五个测试,并且知道所有五个断言都失败了.
| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |