使用断言测试条件构建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我添加了一个替代方案。