【问题标题】:Why or how to use NUnit methods with ICollection<T>为什么或如何将 NUnit 方法与 ICollection<T> 一起使用
【发布时间】:2009-11-24 14:39:09
【问题描述】:

NUnit 的一些 Assert 方法被重载以使用 ICollection 而不是 ICollection&lt;T&gt;,因此您不能使用它们。

这有什么问题吗?哎呀,我是在做傻事吗?

我不得不退回到使用Assert.AreEqual 而不是专门的方法,这让我的测试变得丑陋。

有什么建议吗?

编辑:

感谢您的回复。 NUnit 的That 方法看起来很有趣,所以我会在以后研究它。

Mark 正确地提到了这一点,但 NUnit Collection Asserts 非常好。我最近在一些新测试中使用了它们,发现它们非常适合使用。

【问题讨论】:

  • 我应该提到,在我的课堂上我正在测试。将方法返回类型更改为 List 而不是 IList 解决了这个问题,但反过来我公开了 List ,我不想因为在 SO 等上大量讨论的原因而公开。
  • 使用 linq 将您的集合转换为列表应该没有害处,只要您不断言集合中不存在的任何内容。例如,断言 ForEach 方法有效是错误的形式。

标签: c# unit-testing nunit


【解决方案1】:

我不知道这是否是您正在寻找的,但对于通用集合而不是使用:

Assert.Contains(member, list);

我用:

Assert.That(list.Contains(member));

我觉得几乎一样可读。

【讨论】:

    【解决方案2】:

    ICollectionICollection&lt;T&gt; 是不同的合约 - 一个不继承另一个。

    http://msdn.microsoft.com/en-us/library/system.collections.icollection_members.aspx http://msdn.microsoft.com/en-us/library/y2fx0ty0.aspx

    如果你有一个泛型集合,你可以在它上面调用ToList() 并获得一个List&lt;T&gt;,这恰好也实现了非泛型ICollection。然后在 NUnit Assert 方法中使用该 List。

    【讨论】:

    • 粉碎。 Linq 挽救了这一天(又一次)。干杯,没想到这一点。
    • Linq 可能无法挽救这一天,只是给你一个玫瑰色的回忆,但以后会让人失望。
    • 它给了我 ToList(),我很高兴。
    【解决方案3】:

    有一组 CollectionAsserts,或者您可以从 AssertHelper 继承您的测试并使用类似

    的语法
    Expect(actual, Is.EquivalentTo(expected));
    

    查看文档应该会为您提供适用于集合的约束的语法。

    这是link(这是版本 2.5.2)

    注意Expect 只是 Assert.That 的简写...

    【讨论】:

    • 你的回答比公认的好,可惜了。录取只晚了 3 分钟。
    猜你喜欢
    • 2013-05-19
    • 2020-02-10
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多