只是好奇是否有解决方案而不使基类方法虚拟并且派生方法标记为覆盖:
我希望它跳转到派生方法中,将属性设置为 true(出于测试目的,几乎就像这是一个模拟),但它正在跳转到基类中。唯一的解决方案是使基础虚拟化,我想我可以在派生中将其标记为新的,这样就可以了。
public class SomeClass
{
private readonly IFoo _foo;
public SomeClass(IFoo foo)
{
_foo = foo;
}
public void DoSomething()
{
_foo.DoFoo();
}
}
public interface IFoo
{
void DoFoo();
}
public class Foo : IFoo
{
public void DoFoo()
{
}
}
public class Foo2 : Foo
{
public bool DoFooWasCalled { get; set; }
public new void DoFoo()
{
DoFooWasCalled = true;
base.DoFoo();
}
}
这是失败的测试:
[TestFixture]
public class TestingCSInheritance
{
[Test]
public void TestMethod()
{
var foo = new Foo2();
var someClass = new SomeClass(foo);
someClass.DoSomething();
foo.DoFooWasCalled.ShouldBe(true);
}
}
我的猜测是,因为我正在使用带有接口的依赖注入,所以它使用的是基类,但我不确定为什么。