メソッドA()
を持つクラスを、メソッドD()
で使用される外部サービスに依存させる必要があります。 DIパターンのいずれかを使ってこれを行うことができますが、コンストラクタインジェクションはおそらく最善の出発点です。
この状況になると、D()
の外部サービスが偽装され、クラスに注入されることになります。テストは現在、偽の動作によって制御されています。その後
class Thing
{
private IExternalService _externalService;
public Thing(IExternalService externalService)
{
_externalService = externalService;
}
public void A() { ... }
public void D(string foo)
{
_externalService.DoSomeStuff();
}
}
::のような
何か
[Fact]
public void TestThisOut()
{
var fakeExternalService = new MockFramework.CreateMock();
fakeExternalService
.ShouldDoSomethingWhen(s => s.DoSomeStuff())
.IsCalled();
var testThing = new Thing(fakeExternalService);
testThing.A();
Assert.That(testThing, Did.Some.Thing());
}
'A'メソッドを入力すると' D'を呼び出すことはできません。 –
はい、あなたはMock * D *をしなければなりません。 – bit
どちらの場合でも、 'D'呼び出しをスキップしたいのは問題そのものです。ユニットを変更したくない場合は、それは本物のテストではありません。あなたのテストでは、コードの単位をブラックボックスのビットとして扱うべきです。 "私はそれにこの入力を与える、私はこの出力を期待しています。 –