Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这个单元测试如何转化为利用模拟框架?_C#_Mocking_Tdd_Moq_Rhino Mocks - Fatal编程技术网

C# 这个单元测试如何转化为利用模拟框架?

C# 这个单元测试如何转化为利用模拟框架?,c#,mocking,tdd,moq,rhino-mocks,C#,Mocking,Tdd,Moq,Rhino Mocks,我试图用TDD的方式来实践单元测试,所以我创建了一组我认为可以独立测试的接口。我不确定我是否成功了,但我现在非常确定是时候使用模拟框架了。我从这个例子中学到了最好的东西,我想一个非常精通的人可能会很快把这个翻译成其中一个(Moq或Rhino Mock?这些就是我发现的) 单元测试: [TestMethod] public void RendererRendersEachWidgetByCallingBeginRenderThenEndRender() {

我试图用TDD的方式来实践单元测试,所以我创建了一组我认为可以独立测试的接口。我不确定我是否成功了,但我现在非常确定是时候使用模拟框架了。我从这个例子中学到了最好的东西,我想一个非常精通的人可能会很快把这个翻译成其中一个(Moq或Rhino Mock?这些就是我发现的)

单元测试:

    [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));
    }
[TestMethod]
public void renderrenderSearchWidgetByCallingBeginRenderThenendRender()公共无效渲染器
{
//模拟/存根
ISpace space=new MockSpace();
IWorld world=新模拟世界();
IWidget widget1=新的MockWidget(“widget1”);
IWidget-widget2=新的MockWidget(“widget2”);
添加(widget1);
添加(widget2);
//被测物体
iRender目标=新渲染器(世界、空间);
target.Render();
//验证是否调用了BeginRender
Assert.IsTrue((空间为MockSpace.results.Contains)(“Begin Render”+widget1.Id));
Assert.IsTrue((空间为MockSpace.results.Contains)(“Begin Render”+widget2.Id));
//验证是否调用了EndRender
Assert.IsTrue((空间为MockSpace.results.Contains)(“End Render”+widget1.Id));
Assert.IsTrue((空间作为MockSpace.results.Contains)(“End Render”+widget2.Id));
//验证是否在EndRender之前调用BeginRender
var orderedResults=(空间作为MockSpace.results.Select((s,i)=>Tuple.Create(i,s));
阿塞特·伊斯特鲁(
(orderedResults.Single(x=>x.Item2==“开始渲染”+widget1.Id).Item1)<
(orderedResults.Single(x=>x.Item2==“End Render”+widget1.Id).Item1));
阿塞特·伊斯特鲁(
(orderedResults.Single(x=>x.Item2==“开始渲染”+widget2.Id).Item1)<
(orderedResults.Single(x=>x.Item2==“End Render”+widget2.Id).Item1));
}

这是一个Rhino.Mocks版本。在
渲染器
的内部未知的地方,我可以随意使用

正如您所看到的,有相当多的设置涉及,但在这种情况下,您不必创建所有这些设置 手动模拟对象类型

[TestMethod]
public void RendererRendersEachWidgetByCallingBeginRenderThenEndRender()
{
    // Mocks/Stubs
      var orderedResultList = new List<string>();

    var space = MockRepository.GenerateStub<ISpace>();
      space.Stub(s => s.BeginRender(Arg<IWidget>.Is.Anything))
            .WhenCalled(x => orderedResultList.Add("Begin Render " + ((IWidget)x.Arguments[0]).Id));
      space.Stub(s => s.EndRender(Arg<IWidget>.Is.Anything))
            .WhenCalled(x => orderedResultList.Add("End Render " + ((IWidget)x.Arguments[0]).Id));

    var world = MockRepository.GenerateStub<IWorld>();

    var widget1 = MockRepository.GenerateStub<IWidget>();
      widget1.Stub(w => w.Id).Return("widget1"); // assuming no public setter for this property

    var widget2 = MockRepository.GenerateStub<IWidget>();
      widget2.Stub(w => w.Id).Return("widget2"); // assuming no public setter for this property

    var widgetList = new List<IWidget>{ widget1, widget2 };
      world.Stub(w => w.Widgets).Return(widgetList);

    // Object under test
    IRenderer target = new Renderer(world, space);
    target.Render();

    // verify BeginRender is called
      space.AssertWasCalled(s => s.BeginRender(Arg<IWidget>.Is.Same(widget1)));
      space.AssertWasCalled(s => s.BeginRender(Arg<IWidget>.Is.Same(widget2)));

    // verify EndRender is called
      space.AssertWasCalled(s => s.EndRender(Arg<IWidget>.Is.Same(widget1)));
      space.AssertWasCalled(s => s.EndRender(Arg<IWidget>.Is.Same(widget2)));

    // verify BeginRender is called before EndRender
    var orderedResults = orderedResultList.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));
}
[TestMethod]
public void renderrenderSearchWidgetByCallingBeginRenderThenendRender()公共无效渲染器
{
//模拟/存根
var orderedResultList=新列表();
var space=MockRepository.GenerateStub();
space.Stub(s=>s.BeginRender(Arg.Is.Anything))
.WhenCalled(x=>orderedResultList.Add(“开始渲染”+((IWidget)x.Arguments[0]).Id));
Stub(s=>s.EndRender(Arg.Is.Anything))
.WhenCalled(x=>orderedResultList.Add(“结束呈现”+((IWidget)x.Arguments[0]).Id));
var world=MockRepository.GenerateStub();
var widget1=MockRepository.GenerateStub();
widget1.Stub(w=>w.Id).Return(“widget1”);//假定此属性没有公共setter
var widget2=MockRepository.GenerateStub();
widget2.Stub(w=>w.Id).Return(“widget2”);//假定此属性没有公共setter
var widgetList=新列表{widget1,widget2};
Stub(w=>w.Widgets).Return(widgetList);
//被测物体
iRender目标=新渲染器(世界、空间);
target.Render();
//验证是否调用了BeginRender
调用space.assertwas(s=>s.BeginRender(Arg.Is.Same(widget1));
调用space.assertwas(s=>s.BeginRender(Arg.Is.Same(widget2));
//验证是否调用了EndRender
调用space.assertwas(s=>s.EndRender(Arg.Is.Same(widget1));
调用space.assertwas(s=>s.EndRender(Arg.Is.Same(widget2));
//验证是否在EndRender之前调用BeginRender
var orderedResults=orderedResultList.Select((s,i)=>Tuple.Create(i,s));
阿塞特·伊斯特鲁(
(orderedResults.Single(x=>x.Item2==“开始渲染”+widget1.Id).Item1)<
(orderedResults.Single(x=>x.Item2==“End Render”+widget1.Id).Item1));
阿塞特·伊斯特鲁(
(orderedResults.Single(x=>x.Item2==“开始渲染”+widget2.Id).Item1)<
(orderedResults.Single(x=>x.Item2==“End Render”+widget2.Id).Item1));
}