Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 断言字典类型是应该存在的类型_C#_Unit Testing_Dictionary - Fatal编程技术网

C# 断言字典类型是应该存在的类型

C# 断言字典类型是应该存在的类型,c#,unit-testing,dictionary,C#,Unit Testing,Dictionary,我们有一个Dll,在很多程序中使用,我一直在编写一些单元测试,以断言它基本上没有改变,测试所有返回的对象 我遇到最多问题的部分是字典类型。我想断言,例如bob.newfilter是一个返回的dictionary类型的dictionary 所讨论的dll代码返回一个筛选器对象 using System.Collections.Generic; namespace Crazy.dll { public class Filters { public Dictionary

我们有一个Dll,在很多程序中使用,我一直在编写一些单元测试,以断言它基本上没有改变,测试所有返回的对象

我遇到最多问题的部分是字典类型。我想断言,例如bob.newfilter是一个返回的dictionary类型的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>();
       }
    }
}
使用System.Collections.Generic;
命名空间疯狂.dll
{
公共类过滤器
{
公共词典颜色可见;
公共字典字母过滤器;
公共词典;
公共字典蓝过滤器;
公共词典是可见的;
公共词典是可见的;
public Filters()//您可以在此处使用方法,因为您需要检查对象的类型,而不是实际值或实例相等性。

您正在尝试使用文档中提供的方法:

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


因此,它在这里不起作用,因为对象自然不相等。您应该使用来检查这一点。

您需要比较类型,而不是对象,因为对象不会相等。我想到,所有这一切都是由于我间接调用了错误的断言(assert.IsNotInstanceOf(bob.GreenIsVisible);)应该是Assert.IsInstanceOf(bob.GreenIsVisible,“错误消息”);感谢Sami让我看得更清楚简单地编译一个将属性分配给
字典的测试将起作用。为什么要编写测试?我不确定您在这里测试的是什么。如果属性类型为
字典
,则保证保存
null
字典
的实例。因此,您的测试没有意义我实际上使用了Assert.IsInstanceOf(bob.GreenIsVisible,“它们不匹配时的消息”);这是使用Nunit.Framework
Assert.AreEqual<Dictionary<string,bool>>(bob.GreenIsVisible, new Dictionary<string,bool>());
CollectionAssert.AllItemsAreInstancesOfType(bob.GreenIsVisible, Dictionary<string, bool>);