【问题标题】:Assert Dictionary types are the types there supposed to be断言字典类型是应该存在的类型
【发布时间】:2015-05-11 09:34:57
【问题描述】:

我们有一个用于许多程序的 Dll,我的任务是编写一些单元测试来断言它基本上没有改变,测试所有返回的对象。

我遇到最多问题的部分是字典类型。我想断言,例如bob.newfilter 是 Dictionary 类型的返回字典。

有问题的 dll 代码返回一个过滤器对象

using System.Collections.Generic;
namespace Crazy.dll
{
    public class Filters
    {
        public Dictionary<int, bool> ColourIsVisible;
        public Dictionary<string, bool> AlphaFilter;
        public Dictionary<string, bool> RedIsVisible;
        public Dictionary<string, bool> BlueFilter;
        public Dictionary<string, bool> BlueIsVisible;
        public Dictionary<string, bool> GreenIsVisible;
        public Filters() // <-- returned object bit interested in testing
        {
            ColourIsVisible = new Dictionary<int, bool>();
            AlphaFilter = new Dictionary<string, bool>();
            RedIsVisible = new Dictionary<string, bool>();
            BlueFilter = new Dictionary<string, bool>();
            BlueIsVisible = new Dictionary<string, bool>();
            GreenIsVisible = new Dictionary<string, bool>();
       }
    }
}

(请不要对此代码发表评论,因为它是什么)

我使用 Nunit 和 Microsoft 的测试框架尝试了一些变体来尝试断言 bob.GreenIsVisible 是返回的字典类型

Assert.AreEqual<Dictionary<string,bool>>(bob.GreenIsVisible, new Dictionary<string,bool>());
CollectionAssert.AllItemsAreInstancesOfType(bob.GreenIsVisible, Dictionary<string, bool>);

都返回了相同的信息

结果消息:Assert.AreEqual 失败。 预期的: .

(在我看来它们看起来一样)

非常感谢任何帮助。

【问题讨论】:

  • 你需要比较类型,而不是对象,因为对象不会相等
  • 我想到了裤子,这一切都是由于我间接调用了错误的断言 (Assert.IsNotInstanceOf>(bob.GreenIsVisible); ) 应该是 Assert.IsInstanceOf >(bob.GreenIsVisible,"错误信息");感谢 Sami 让我们好好看看
  • 简单地编译一个将属性分配给Dictionary&lt;string,bool&gt;的测试就可以了。为什么要编写测试?
  • 我不确定你在这里测试什么。如果属性是Dictionary&lt;string,bool&gt; 类型,则保证持有nullDictionary&lt;string,bool&gt; 的实例。所以,你的测试至少对我来说毫无意义。

标签: c# unit-testing dictionary


【解决方案1】:

您正在尝试使用文档中的Assert&lt;T&gt;(T, T)

使用相等运算符验证两个指定的泛型类型数据是否相等。如果它们不相等,则断言失败。

因此它在这里不起作用,因为对象自然永远不相等。你应该使用Assert.IsInstanceOfType(Object, Type) 来检查这个。

【讨论】:

  • 我实际上使用了 Assert.IsInstanceOf>(bob.GreenIsVisible,"Message when they don't match");这是使用 Nunit.Framework
【解决方案2】:

您可以在这里使用Assert.IsInstanceOfType 方法,因为您需要检查对象的类型,而不是实际值或实例等价性。

【讨论】:

    猜你喜欢
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多