使用断言测试条件构建c#类

使用断言测试条件构建c#类,c#,C#,我应该怎么做,或者我应该如何声明我的类才能使这个断言为真 Assert.AreSame(typeof(MyClass).GetMethod("ToString").DeclaringType, typeof(MyClass)) 您必须重写MyClass声明中的方法 class MyClass { public override string ToString() { return "MyClass"; } } 解释: 重写ToString允许断言传递的

我应该怎么做,或者我应该如何声明我的类才能使这个断言为真

Assert.AreSame(typeof(MyClass).GetMethod("ToString").DeclaringType, typeof(MyClass))

您必须重写MyClass声明中的方法

class MyClass
{
    public override string ToString()
    {
        return "MyClass";
    }
}
解释:

重写ToString允许断言传递的原因是,断言确定了ToString方法声明的类型(默认情况下为System.Object)。通过重写该方法,可以在MyClass中重新声明ToString方法

备选方案

您可以使用
new
关键字代替覆盖。这将重新声明一个方法而不重写它。不同之处在于,当一个实例
MyClass
被强制转换为一个调用
ToString
对象时,它不会调用用
new
关键字修饰的方法,但当用
override
关键字修饰时,它会调用

class MyClass
{
    public new string ToString()
    {
        return "MyClass";
    }
}

在这个测试中,您需要获取ToString()的DeclaringType。但是您的类没有声明“ToString”,因此DeclaringType将始终返回“object”(声明ToString()的基类)

避免这种情况的一种方法是使用ReflectedType属性而不是DeclaringType

Assert.AreSame(typeof(MyClass).GetMethod("ToString").ReflectedType,typeof(MyClass);
如果以这种方式声明“MyClass”,重写ToString(),并使用DeclaringType属性使用原始测试,您将获得相同的结果

class MyClass
{
    public override string ToString()
    {
       return "Foo";
    }
}

希望有帮助

这是您实际需要测试的东西吗?您在这里尝试测试什么?只需在
MyClass
中重写
ToString
?这里真正的问题是什么?你试过什么吗?有效吗?这是一个重新竖琴指南,用于检查我是否“在此类上”正确声明了一个类,因为您尚未发布您的类,我们无法告诉您为什么会这样(没有)。使用重写通过测试,除了override@ngoni我添加了一个替代方案。