【发布时间】:2011-03-23 18:19:44
【问题描述】:
我有一个消费者类负责消费一个字符串并决定如何处理它。它可以解析并将解析数据插入数据库或通知管理员。
下面是我的实现。
public void Consume(string email)
{
if(_emailValidator.IsLocate(email))
{
var parsedLocate = _parser.Parse(email);
// Insert locate in database
}
else if(_emailValidator.IsGoodNightCall(email))
{
// Notify email notifying them that a locate email requires attention.
_notifier.Notify();
}
}
下面是我的单元测试。
// Arrange
var validator = new EmailValidator();
var parser = new Mock<IParser>();
var notifier = new Mock<INotifier>();
var consumer = new LocateConsumer(validator, parser.Object, notifier.Object);
var email = EmailLiterals.Locate;
// Act
consumer.Consume(email);
// Assert
parser.Verify(x => x.Parse(email), Times.Once());
在单元测试中混合模拟和实际实现是否会产生代码异味?另外,如何总是必须测试方法abc() 是否总是运行一次?每次我在 if 块中添加一个函数时添加一个新的单元测试似乎是不对的。好像如果我继续添加到我的 Consume 方法,我会创建一个陷阱。
谢谢。
【问题讨论】:
标签: c# unit-testing design-patterns dependency-injection