public void ArgumentAssignableFrom_WhenArgumentNameIsNullOrEmpty_MustNotThrow()
{
Assert.DoesNotThrow(() => Ensure.ArgumentAssignableFrom(typeof(IInterface), new ImplementedClass(), null));
Assert.DoesNotThrow(() => Ensure.ArgumentAssignableFrom(typeof(IInterface), new InheritedClass(), null));
Assert.DoesNotThrow(() => Ensure.ArgumentAssignableFrom(typeof(IInterface), new ImplementedInheritedClass(), null));
Assert.DoesNotThrow(() => Ensure.ArgumentAssignableFrom(typeof(IInheritedInterface), new ImplementedInheritedClass(), null));
Assert.DoesNotThrow(() => Ensure.ArgumentAssignableFrom(typeof(ImplementedClass), new InheritedClass(), null));
Assert.DoesNotThrow(() => Ensure.ArgumentAssignableFrom(typeof(IInterface), new ImplementedClass(), string.Empty));
Assert.DoesNotThrow(() => Ensure.ArgumentAssignableFrom(typeof(IInterface), new InheritedClass(), string.Empty));
Assert.DoesNotThrow(() => Ensure.ArgumentAssignableFrom(typeof(IInterface), new ImplementedInheritedClass(), string.Empty));
Assert.DoesNotThrow(() => Ensure.ArgumentAssignableFrom(typeof(IInheritedInterface), new ImplementedInheritedClass(), string.Empty));
Assert.DoesNotThrow(() => Ensure.ArgumentAssignableFrom(typeof(ImplementedClass), new InheritedClass(), string.Empty));
var ex1 = Assert.Throws<ArgumentException>(() => Ensure.ArgumentAssignableFrom(typeof(IInterface), new NotImplementedClass(), null));
ex1.ParamName.Should().BeNull();
var ex2 = Assert.Throws<ArgumentException>(() => Ensure.ArgumentAssignableFrom(typeof(ImplementedClass), new ImplementedInheritedClass(), null));
ex2.ParamName.Should().BeNull();
var ex3 = Assert.Throws<ArgumentException>(() => Ensure.ArgumentAssignableFrom(typeof(IInterface), new NotImplementedClass(), string.Empty));
ex3.ParamName.Should().Be(string.Empty);
var ex4 = Assert.Throws<ArgumentException>(() => Ensure.ArgumentAssignableFrom(typeof(ImplementedClass), new ImplementedInheritedClass(), string.Empty));
ex4.ParamName.Should().Be(string.Empty);
}