В пользу тех, кто приземляется здесь через Google (или Bing :-))
Assert.IsAssignableFrom<T>(object actual)
предназначено для проверки того, может ли исследуемый объект быть заменен типом T. Фактически это означает, что утверждение проверяет взаимосвязь «есть» между исследуемым объектом и типом T.
Давайте посмотрим некоторый код (намеренно упрощенный):
// 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 - проще говоря, если «фактическим» является тип T или тип, производный от T
[TestMethod]
public void Test_IsAssignableFrom()
{
var manager = new Manager();
// Manager derives from Employee so the below is true
Assert.IsInstanceOf<Employee>(manager);
}
EDIT
Оказывается, эти утверждения работают так же, как методы Type.IsAssignableFrom и Type.IsInstanceOf в System.Type