单元测试和测试测试

时间:2015-07-30 20:05:26

标签: c# unit-testing moq

我的应用可以更新项目。我想为此创建一个单元测试。

这是在使用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中完成的,那么我只是测试测试。如何测试更新功能的业务逻辑?

1 个答案:

答案 0 :(得分:0)

在我看来,你的问题没有直接答案。

您的问题是您的消息类违反了正弦责任原则 - 通过在一个类中执行多项操作(执行验证,保存到数据库,......)或通过紧耦合。

单元测试不适用于那种代码。为了能够对保存方法进行单元测试,您需要将所有方面提取到单个单元(例如类)中,然后单独测试它们。

这样你最终会得到一个用于验证的类,一个用于实际保存的类,你的域对象等等。然后将这些类组合在一起形成整个事物。

现在你可以单独测试这些类中的每一个,你可能会发现你唯一需要模拟的是实际的写作过程。