基本クラスのメソッドを仮想化し、派生メソッドにオーバーライドのマークを付けずに、これに対する解決策があるかどうかだけ知りたいです。
派生メソッドにジャンプして、プロパティを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);
}
}
私の推測では、インターフェイスで依存性注入を使用しているため、基本クラスを使用していますが、その理由はわかりません。