私は TDD の方法で単体テストを練習しようとしているので、多少独立してテストできると思われる一連のインターフェイスを作成しました。成功したかどうかはわかりませんが、モック フレームワークを使用するときが来たと確信できるところまで来ました。私は例から最もよく学び、非常に熟練した誰かがおそらくこれをそれらの1つにすばやく翻訳できると思います(MoqまたはRhino Mocksでしょうか?それらは私が見つけたものです)。
単体テスト:
[TestMethod]
public void RendererRendersEachWidgetByCallingBeginRenderThenEndRender()
{
// Mocks/Stubs
ISpace space = new MockSpace();
IWorld world = new MockWorld();
IWidget widget1 = new MockWidget("widget1");
IWidget widget2 = new MockWidget("widget2");
world.Add(widget1);
world.Add(widget2);
// Object under test
IRenderer target = new Renderer(world, space);
target.Render();
// verify BeginRender is called
Assert.IsTrue((space as MockSpace).results.Contains("Begin Render " + widget1.Id));
Assert.IsTrue((space as MockSpace).results.Contains("Begin Render " + widget2.Id));
// verify EndRender is called
Assert.IsTrue((space as MockSpace).results.Contains("End Render " + widget1.Id));
Assert.IsTrue((space as MockSpace).results.Contains("End Render " + widget2.Id));
// verify BeginRender is called before EndRender
var orderedResults = (space as MockSpace).results.Select((s, i) => Tuple.Create(i, s));
Assert.IsTrue(
(orderedResults.Single(x => x.Item2 == "Begin Render " + widget1.Id).Item1) <
(orderedResults.Single(x => x.Item2 == "End Render " + widget1.Id).Item1));
Assert.IsTrue(
(orderedResults.Single(x => x.Item2 == "Begin Render " + widget2.Id).Item1) <
(orderedResults.Single(x => x.Item2 == "End Render " + widget2.Id).Item1));
}