2016-06-07 23 views
0

我正在做两个从linq到sql查询构建的公共列表CollectionAssert。当我为这些集合进行讨论时,即使对于明确应该通过的测试集,它也总是失败。CollectionAssert.IsSubsetOf公共静态列表总是失败

我甚至在我的代码中做了一个快速测试,以确保我正确使用CollectionAssert。

 //This always passes 
     List<string> testList1 = new List<string>(); 
     List<string> testList2 = new List<string>(); 
     testList1.Add("one"); 
     testList2.Add("two"); 
     testList2.Add("three"); 
     testList2.Add("one"); 
     CollectionAssert.IsSubsetOf(testList1, testList2); 

     //This always fails 
     CollectionAssert.IsSubsetOf(memberOrganizations, member_Dim_Organization, "Error Matching Fields"); 

有关如何更正第二个断言的语法的任何想法?我附上了我的调试窗口的屏幕截图。 Debug Screen Shot

我定义列表的结构的格式在一种方法

namespace DefineStructure 
{ 
    public class Results 
    { 
     public string OrgID { get; set; } 

    } 

该负载中的数据在一个单独的

namespace Reporting.Member_Dim_Organization.ETL.QA 
{ 
    public class LoadData 
    { 
    public static cDataContext oMain = new cDataContext(); 

    public static List<Results> oecMainResults = (from mo in oecMain.MemberOrganizations 
                orderby mo.OrgID 
                select new Results 
              { 
               OrgID = (mo.OrgID).ToString() }).Take(1).ToList(); 

然后我声明它在我的主程序

namespace Reporting.Main 

{ 
    [Binding] 
    public class Member_Dim_OrganizationsSteps 
    { 
     public static List<Results> memberOrganizations = LoadData.oecMainResults; 
     public static List<Results> member_Dim_Organization = LoadData.reportingMasterResults; 

这有助于澄清?

感谢您帮助一位试图学习一些新技巧的老狗。

+3

我怀疑'memberOrganizations'和'member_Dim_Organization'是引用类型的集合,你没有重写'Equals'和/或'GetHashCode'。如果它们是自定义类型,并且您拥有覆盖它们,那么将该实现添加到您的问题中。 –

+0

我添加了一些关于我如何拉动信息的更多信息。我会喜欢我的方法的任何反馈。非常感谢您的时间。 – Richard

回答

0

假设两个集合的实例具有相同的数据它们相等,默认情况下不是这种情况。这听起来像您需要覆盖Results类中的EqualsGetHashCode以定义“相等”。

定义自定义类型的等式有很多例子,其中大多数涉及将散列代码定义为定义相等的字段的散列代码的组合。

+0

真棒的意见!谢谢。我能够分解这里的指示http://www.aaronstannard.com/overriding-equality-in-dotnet/并将它们应用于我的项目。谢谢你指点我正确的方向!这是一个巨大的帮助。 – Richard