【发布时间】: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<string,bool>的测试就可以了。为什么要编写测试? -
我不确定你在这里测试什么。如果属性是
Dictionary<string,bool>类型,则保证持有null或Dictionary<string,bool>的实例。所以,你的测试至少对我来说毫无意义。
标签: c# unit-testing dictionary