首先,我是测试新手,所以这可能是一个愚蠢的问题。我目前正在为我的类(class)创建单元测试。我有一个属性,根据可为空的属性,将向数据库发送一个新的 Comment 对象。通常,通过单元测试,我只会确保一个对象被发送到我的模拟服务,并称其为良好。然而,测试注释对象上的值以确保它走在正确的路径上,而不是仅仅假设它是正确的,这不是更有意义吗?这是我正在测试的代码示例:
if (DeliveryDate != null)
{
AddPartHistory("Delivery Date Changed from " + ((DateTime)DeliveryDate).ToShortDateString() + " to " + ((DateTime)value).ToShortDateString());
}
else
{
AddPartHistory("Delivered Date of " + ((DateTime)value).ToShortDateString() + " was added.");
}
AddPartHistory
函数将 Comment 对象(在名为 Entry 的属性中保存文本)发送到数据库(或在测试期间发送到模拟服务),并将其存储在名为 NewPartHistory
的属性中。 。这是我认为可能更像是集成测试的代码:
vm.DeliveryDate = DateTime.UtcNow;
Assert.AreEqual("Delivered Date of " + ((DateTime)vm.DeliveryDate).ToShortDateString() + " was added.", vm.NewPartHistory.Entry);
OldDeliveryDate = vm.DeliveryDate;
vm.DeliveryDate = DateTime.UtcNow;
Assert.AreEqual("Delivery Date Changed from " + ((DateTime)OldDeliveryDate).ToShortDateString() + " to " + ((DateTime)vm.DeliveryDate).ToShortDateString(), vm.NewPartHistory.Entry);
那么,回到问题,我应该将此代码留在单元测试中,还是转向集成测试。
更新:
因为有很多关于我的 AddPartHistory
的讨论方法,就在这里。它只是填写 PartHistory
的标准数据。 (始终相同),添加条目,然后更新 Listview
新数据:
private void AddPartHistory(string historyText)
{
NewPartHistory = new CdaService.PartHistory();
NewPartHistory.EnteredBy = User.Current.UID;
NewPartHistory.Entry = historyText;
NewPartHistory.EntryDate = DateTime.UtcNow;
NewPartHistory.PartId = ThisPart.Id;
webService.Insert(NewPartHistory);
GetPartHistory();
}
最佳答案
我会更改它以将新的 Comment 对象传递给 AddPartHistory 方法 - 而不是向其传递值来构建对象。这样您就可以对逻辑进行单元测试,包括注释对象的构造。从 AddPartHistory 返回注释对象也将很有帮助,以使其更容易断言。
将其移出方法,如下所示:
NewPartHistory = new CdaService.PartHistory();
NewPartHistory.EnteredBy = User.Current.UID;
NewPartHistory.EntryDate = DateTime.UtcNow;
NewPartHistory.PartId = ThisPart.Id;
if()
{
NewPartHistory.Entry = "Delivered Date of"......;
return AddPartHistory(NewPartHistory );
}
else
{
NewPartHistory.Entry = "Delivery Date Changed from".....;
return AddPartHistory(NewPartHistory );
}
//return comment object from AddPartHistory so that you can call this entire method and assert all properties
关于c# - 代码应该进行单元测试还是集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20084586/