C# 断言字典类型是应该存在的类型
我们有一个Dll,在很多程序中使用,我一直在编写一些单元测试,以断言它基本上没有改变,测试所有返回的对象 我遇到最多问题的部分是字典类型。我想断言,例如bob.newfilter是一个返回的dictionary类型的dictionary 所讨论的dll代码返回一个筛选器对象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
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>);