我的应用可以更新项目。我想为此创建一个单元测试。
这是在使用Moq的c#中。当我在mock中调用setup方法时。我正在使用现有项目,然后根据需要进行更新。
messageMock.Setup(m => m.SaveMessage(It.IsAny<Message>()))
.Callback((Message msg) =>
{
var oldMsg = _messages.FirstOrDefault(m => m.Id == msg.MessageID);
if (oldMsg != null)
{
oldMsg.Description = msg.Description;
oldMsg.IsActive = msg.IsActive;
oldMsg.Name = msg.Name;
oldMsg.Type = msg.Type;
}
}).Verifiable();
,测试方法是:
public void SaveMessage(Message message)
{
var windowsIdentity = WindowsIdentity.GetCurrent();
message.ModifiedBy = windowsIdentity != null ?
windowsIdentity.Name :
string.Empty;
message.ModifyDate = DateTime.Now;
Messaging.Entry(message).State = EntityState.Modified;
Messaging.SaveChanges();
}
如果更新项目的逻辑是在Moq中完成的,那么我只是测试测试。如何测试更新功能的业务逻辑?
答案 0 :(得分:0)
在我看来,你的问题没有直接答案。
您的问题是您的消息类违反了正弦责任原则 - 通过在一个类中执行多项操作(执行验证,保存到数据库,......)或通过紧耦合。
单元测试不适用于那种代码。为了能够对保存方法进行单元测试,您需要将所有方面提取到单个单元(例如类)中,然后单独测试它们。
这样你最终会得到一个用于验证的类,一个用于实际保存的类,你的域对象等等。然后将这些类组合在一起形成整个事物。
现在你可以单独测试这些类中的每一个,你可能会发现你唯一需要模拟的是实际的写作过程。