单元测试对象类型的正确方法

本文关键字:方法 对象 类型 单元测试 | 更新日期: 2023-09-27 17:49:56

使用Visual Studio单元测试框架,我正在寻找两个选项:

Assert.AreEqual(myObject.GetType(), typeof(MyObject));

Assert.IsInstanceOfType(myObject, typeof(MyObject));

这两个选项有区别吗?一个比另一个更"正确"吗?

这样做的标准方法是什么?

单元测试对象类型的正确方法

如果类型不完全相同,第一个示例将失败,而第二个示例仅在myObject不能赋值给给定类型时才会失败,例如

public class MySubObject : MyObject { ... }
var obj = new MySubObject();
Assert.AreEqual(obj.GetType(), typeof(MyObject));   //fails
Assert.IsInstanceOfType(obj, typeof(MyObject));     //passes

小语法点:虽然上面的Assert.AreEqual()语句可以工作,但参数的顺序应该颠倒,即Assert.AreEqual(Type expected, Type actual)

在本例中:Assert.AreEqual(typeof(MyObject), obj.GetType());

看起来XUnit更好:

Assert.IsType<MyClass>(myObj);

In NUnit

Assert.That(myObject, Is.TypeOf<MyObject>()) //Tests exact type

Assert.That(myObject, Is.InstanceOf<MyObject>()) //Tests type and subtype

最容易理解的断言,因为命名后的NUnit:)

在我的例子中,下一行可以正常工作:

Assert.IsAssignableFrom<TheClass>(result);