public void ArgumentTypeAssignableFrom_WhenTypeIsNotAsssignable_MustThrow()
{
var ex1 = Assert.Throws<ArgumentException>(() => Ensure.ArgumentTypeAssignableFrom(typeof(IInterface), typeof(NotImplementedClass), "argument"));
ex1.ParamName.Should().Be("argument");
var ex2 = Assert.Throws<ArgumentException>(() => Ensure.ArgumentTypeAssignableFrom(typeof(IInterface), typeof(IOtherInterface), "argument"));
ex2.ParamName.Should().Be("argument");
var ex3 = Assert.Throws<ArgumentException>(() => Ensure.ArgumentTypeAssignableFrom(typeof(ImplementedClass), typeof(IInterface), "argument"));
ex3.ParamName.Should().Be("argument");
var ex4 = Assert.Throws<ArgumentException>(() => Ensure.ArgumentTypeAssignableFrom(typeof(IInheritedInterface), typeof(IInterface), "argument"));
ex4.ParamName.Should().Be("argument");
var ex5 = Assert.Throws<ArgumentException>(() => Ensure.ArgumentTypeAssignableFrom(typeof(ImplementedClass), typeof(ImplementedInheritedClass), "argument"));
ex5.ParamName.Should().Be("argument");
}