简单的Assert.IsAssignableFrom失败
本文关键字:失败 IsAssignableFrom Assert 简单 | 更新日期: 2023-09-27 17:48:59
为什么这个简单的断言语句失败了?据我所知,我应该是。不幸的是,由于功能是如此基本,所以没有太多的信息。
public interface IDummy{}
public class Dummy : IDummy {}
Assert.IsAssignableFrom<IDummy>(new Dummy());
运行此测试将产生
Expected: assignable from <Application.Tests.ViewModels.IDummy>
But was: <Application.Tests.ViewModels.Dummy>
我已经尝试过交换接口和对象端,但无济于事。
IsAssignableFrom的工作方式与您期望的相反。它问的是:(值)是否可以从IDummy中分配。或者:"是否可分配给(值)?"
从XML文档:///断言一个对象可以被赋给给定类型的值。
你可能想要Assert.IsInstanceOfType()
为了那些通过Google(或Bing)登陆这里的人的利益:-)
Assert.IsAssignableFrom<T>(object actual)
意味着检查被检查的对象是否可以被类型t替代。实际上,这意味着断言正在测试被检查的对象和类型t之间的"is-a"关系。
让我们看一些代码(有意简化):
// The Base class
public class Employee
{
public int EmployeeId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfJoining { get; set; }
}
// The derived class
public class Manager : Employee
{
public IList<Employee> EmployeesReporting { get; set; }
}
现在断言:
// NOTE: using Assert = NUnit.Framework.Assert;
[TestMethod]
public void Test_IsAssignableFrom()
{
var employee = new Employee();
// Manager is-a Employee, so the below is true
Assert.IsAssignableFrom<Manager>(employee);
}
而IsInstanceOf<T>(object actual)
的目的是检查被测试对象是否(如其名称所示)是类型T的实例——简单地说,如果"actual"是类型T或从T派生的类型
[TestMethod]
public void Test_IsAssignableFrom()
{
var manager = new Manager();
// Manager derives from Employee so the below is true
Assert.IsInstanceOf<Employee>(manager);
}
编辑事实证明,这些断言的工作方式与Type相同。IsAssignableFrom和Type。IsInstanceOf方法。类型