如何将复杂对象作为单元测试的C#中的结构进行比较

时间:2011-06-08 09:02:18

标签: .net unit-testing

我遇到了以下问题: 目前我正在使用TDD重构我的项目。有一个我无法改变的现有域名。

代码示例:

public class Product: IEquatable<Product>
{
    public int Id { get; set; }
    public string Name { get; set; }

    public bool Equals(Product other)
    {
        if (other == null)
            return false;
        if (Id == other.Id && Name == other.Name)
            return true;
        return false;
    }
}


[TestClass]
public class ProductTest
{
    [TestMethod]
    public void Test1()
    {
        var product1 = new Product {Id = 100, Name = "iPhone"};
        var product2 = new Product {Id = 100, Name = "iPhone"};
        Assert.IsTrue(product1.Equals(product2));
    }
}

我的目标是找到一个快速的解决方案来比较复杂对象作为结构而不实现IEquatable因为我无法扩展业务层。我的意思是像Automapper,但不是为了映射而是为了比较。请给出一些建议。

提前感谢。

1 个答案:

答案 0 :(得分:4)

使用herehere中的代码:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
}


public static class ProductTest
{
    public static void Main()
    {
        var product1 = new Product { Id = 100, Name = "iPhone" };
        var product2 = new Product { Id = 100, Name = "iPhone" };
        bool x = PropertyCompare.Equal(product1, product2); // true

        var deltas = PropertyComparer<Product>.GetDeltas(product1, product2);
        // ^^= an empty list
    }
}

将第二个Name更改为"iPhone2",会显示false以及包含单个条目的列表:"Name"