检查两种类型是否相同

时间:2014-08-25 13:18:07

标签: c# unit-testing codedom

出于单元测试的目的,我们想检查一个类的实现是否已经改变。要检查的类主要包含应用程序中使用的常量或静态字段。与语言文件类似。

我们的想法是通过将此类的实现与最后接受的实现版本进行比较来更改,从而通过失败的单元测试获得通知。有了这个,我的意思是当发生变化时,团队成员会手动审查和接受(或拒绝)该课程。

现在,实际问题是:如何比较两个类是否相同?

修改

此类的两个例子:

public class A
{
    private string _value;

    private A(string value)
    {
        _value = value;
    }

    public static readonly A Foo = new A("foo");
    public static readonly A Bar = new A("bar");
}


public static class B
{
    public const string Foo = "foo";
    public const string Bar = "bar";
}

1 个答案:

答案 0 :(得分:1)

@Dio F - 我不确定这是否属于您之后的情况。但是你可以通过反射检查静态属性的值。 I.E.如果我要使用你的例子:

var typeA = typeof(A);
var staticFieldsA = typeA.GetFields(BindingFlags.Static | BindingFlags.Public);
var typeB = typeof(B);
var staticFieldsB = typeB.GetFields(BindingFlags.Static | BindingFlags.Public);

var fooAField = staticFieldsA.Where(f => f.Name == "Foo").Single();
var fooBField = staticFieldsB.Where(f => f.Name == "Foo").Single();
var fooAValue = fooAField.GetValue(null);
var fooBValue = fooBField.GetValue(null);
// fail
Assert.AreEqual(fooAValue, fooBValue);

因此,无论实现(const,公共静态字段),都可以检查值。