Excluded static methods when determining if a type is pure virtual (Fixes #118)
Also added a (already passing) test that checks that a substitute for a concrete with a static method can setup a return value to improve coverage of this type of class
This commit is contained in:
Родитель
9ebc8b1981
Коммит
969cce38de
|
@ -47,6 +47,18 @@ namespace NSubstitute.Acceptance.Specs.FieldReports
|
|||
|
||||
Assert.That(returnedClass, Is.SameAs(obj));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Substitute_of_concrete_with_static_member_should_allow_setup_of_return_value()
|
||||
{
|
||||
const string value = "test";
|
||||
var sub = Substitute.For<ConcreteWithPublicStaticMethod>();
|
||||
sub.AProperty.Returns(value);
|
||||
|
||||
var returnedValue = sub.AProperty;
|
||||
|
||||
Assert.That(returnedValue, Is.EqualTo(value));
|
||||
}
|
||||
}
|
||||
|
||||
public class ConcreteWithPublicStaticMethod
|
||||
|
|
|
@ -29,6 +29,9 @@ namespace NSubstitute.Specs.Routing.AutoValues
|
|||
[TestCase(typeof(TestClasses.PureVirtualClassWithVirtualInterfaceImpl), true)]
|
||||
[TestCase(typeof(TestClasses.PureDescendentOfPureVirtualClass), true)]
|
||||
[TestCase(typeof(TestClasses.PureVirtualClassWithAPublicField), true)]
|
||||
[TestCase(typeof(TestClasses.PureVirtualClassWithAPublicStaticMethod), true)]
|
||||
[TestCase(typeof(TestClasses.PureVirtualClassWithAPublicStaticField), true)]
|
||||
[TestCase(typeof(TestClasses.PureVirtualClassWithAPublicStaticProperty), true)]
|
||||
[TestCase(typeof(TestClasses.PureVirtualClassWithoutParameterlessConstructor), false)]
|
||||
[TestCase(typeof(TestClasses.ClassWithANonVirtualPublicMember), false)]
|
||||
[TestCase(typeof(TestClasses.ClassWithNonVirtualInterfaceImpl), false)]
|
||||
|
@ -132,6 +135,21 @@ namespace NSubstitute.Specs.Routing.AutoValues
|
|||
}
|
||||
|
||||
public class VirtualClassWithInternalConstructor { internal VirtualClassWithInternalConstructor() { } }
|
||||
|
||||
public class PureVirtualClassWithAPublicStaticMethod
|
||||
{
|
||||
public static void StaticMethod() {}
|
||||
}
|
||||
|
||||
public class PureVirtualClassWithAPublicStaticProperty
|
||||
{
|
||||
public static string StaticProperty { get; set; }
|
||||
}
|
||||
|
||||
public class PureVirtualClassWithAPublicStaticField
|
||||
{
|
||||
public string StaticField;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -45,7 +45,7 @@ namespace NSubstitute.Routing.AutoValues
|
|||
|
||||
private bool IsPureVirtualType(Type type)
|
||||
{
|
||||
var methods = type.GetMethods().Where(NotMethodFromObject);
|
||||
var methods = type.GetMethods().Where(NotMethodFromObject).Where(NotStaticMethod);
|
||||
return methods.All(IsOverridable);
|
||||
}
|
||||
|
||||
|
@ -63,5 +63,10 @@ namespace NSubstitute.Routing.AutoValues
|
|||
{
|
||||
return methodInfo.DeclaringType != typeof(object);
|
||||
}
|
||||
|
||||
private bool NotStaticMethod(MethodInfo methodInfo)
|
||||
{
|
||||
return !methodInfo.IsStatic;
|
||||
}
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче