c# - 代码应该进行单元测试还是集成测试

标签 c# unit-testing testing integration-testing

首先,我是测试新手,所以这可能是一个愚蠢的问题。我目前正在为我的类(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/

相关文章:

c# - 自定义列表框排序

c# - 在异步方法中使用 await 来防止下一行代码运行

c# - 抽象类的不可空方法的可空实现

unit-testing - 单元测试 Vue JS 和 Vue Resource 时状态不变

php - 可以在尝试运行任何东西之前检查步骤是否已定义吗?

testing - Gitlab+测试用例管理工具

c# - 如何在 C# 中对 Textrenderer.DrawText 方法进行单元测试

python - 如何让 Pycharm 从测试文件夹递归运行所有 python 单元测试

java - 将模拟对象添加到 Mockito spy 列表 <>

javascript - 如何仅在先前的异步测试通过后才运行 mocha 测试?