使用 ForEach 进行单元测试

本文关键字:单元测试 ForEach 使用 | 更新日期: 2023-09-27 18:30:53

假设:"personList"是 Person 对象的列表

"代理"是一个对象,可以提供有关商店对象的活动(人员的属性)

"GetShopActivity"返回一个人的购物活动对象列表

我在测试项目中有以下行:

personList.ForEach(p => new List<Person>(p.Shops)
    .ForEach(t=> Assert.IsNotNull(agent.GetShopActivity(t, startDate, endDate))));

我怎样才能让它变得更好?

使用 ForEach 进行单元测试

你可能有很多事情可以做,但首先要做的是让它更具可读性。也许是这样的:

var nullActivities = 
  from p in partnerList
  from t in p.Tenants
  let activity = agent.GetShopActivity(t, startDate, endDate)
  where activity == null
  select activity;
Assert.Empty(nullActivities);

此外:

你可能想考虑一下

  • 测试应该是简单的(即它的圈复杂度应该为 1)。
  • 阅读测试的人应该立即清楚正在测试的场景和行为(如果startDateendDate的值很重要,则给它们不那么通用的名称可能是有益的)。
  • 最好只有一个断言,因为这样很容易知道测试失败时失败的位置。