检查两种类型是否相等

本文关键字:是否 类型 两种 检查 | 更新日期: 2023-09-27 18:19:17

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

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

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

编辑

这类的两个例子:

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";
}

检查两种类型是否相等

@Dio F -我不确定这是否是你所追求的。但是你可以通过反射检查静态属性的值。例如,如果我要用你的例子:

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, public static field),你都可以检查值