Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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# 使用RhinoMocks.NET进行简单模拟的问题_C#_.net_Unit Testing_Mocking_Rhino Mocks - Fatal编程技术网

C# 使用RhinoMocks.NET进行简单模拟的问题

C# 使用RhinoMocks.NET进行简单模拟的问题,c#,.net,unit-testing,mocking,rhino-mocks,C#,.net,Unit Testing,Mocking,Rhino Mocks,我试着用Rhinomock做实验,我不得不说我是一个新手,也许我没有得到一些明显的东西。我现在做的是: [TestMethod] public void SaveResponsibleUserFromChangeset() { var action = mocks.StrictMock<GenomeAction>(); var changeset = new ActionChangeset(); changes

我试着用Rhinomock做实验,我不得不说我是一个新手,也许我没有得到一些明显的东西。我现在做的是:

    [TestMethod]
    public void SaveResponsibleUserFromChangeset()
    {
        var action = mocks.StrictMock<GenomeAction>();
        var changeset = new ActionChangeset();

        changeset.ResponsibleUser = new ChangeableProperty<UserIdentity>("Administrator") {IsChanged = true};
        changeset.MarkAll(true);

        using(mocks.Record())
        {
            Expect.Call(action.ResponsibleUser).SetPropertyAndIgnoreArgument();
        }

        using(mocks.Playback())
        {
            var persistor = new ActionPersistor(new MockIdentityResolver());
            persistor.SaveActionChanges(changeset, action);
        }

        action.VerifyAllExpectations();
    }

    private class MockIdentityResolver : IIdentityResolver
    {
        public GenomeUser GetUser(UserIdentity identity)
        {
            var user = mocks.DynamicMock<GenomeUser>();
            user.Username = identity.Username;
            return user;
        }
    }
[TestMethod]
public void SaveResponsibleUserFromChangeset()
{
var action=mocks.StrictMock();
var changeset=new ActionChangeset();
changeset.ResponsibleUser=新的可更改属性(“管理员”){IsChanged=true};
changeset.MarkAll(true);
使用(mocks.Record())
{
Expect.Call(action.ResponsibleUser).SetPropertyAndIgnoreArgument();
}
使用(mocks.Playback())
{
var persistor=new ActionPersistor(new MockIdentityResolver());
persistor.SaveActionChanges(变更集、操作);
}
action.verifyallexpections();
}
私有类MockIdentityResolver:IIdentityResolver
{
公共GenomeUser GetUser(用户标识)
{
var user=mocks.DynamicMock();
user.Username=identity.Username;
返回用户;
}
}
其目的是进行一个非常简单的测试,检查
SaveActionChanges
方法是否设置了
ResponsibleUser
属性。作为其中的一部分,它需要使用解析器解析用户身份,为此我提供了一个模拟实现。不幸的是,我似乎不能在回放模式中返回另一个mock,因为它(在第二个using的右括号中)说,当对象(类型为GenomeUser)处于记录状态时,该操作无效


你知道是什么原因导致了这个问题,以及如何克服它吗?

我认为你需要在
mocks.Playback()之外创建新的MockIdentityResolver()

[TestMethod]
public void SaveResponsibleUserFromChangeset()
{
var action=mocks.StrictMock();
var changeset=new ActionChangeset();
var识别溶出器;
changeset.ResponsibleUser=新的可更改属性(“管理员”){IsChanged=true};
changeset.MarkAll(true);
使用(mocks.Record())
{
Expect.Call(action.ResponsibleUser).SetPropertyAndIgnoreArgument();
identityResolver=新的MockIdentityResolver()
}
使用(mocks.Playback())
{
var persistor=新操作persistor(identityResolver);
persistor.SaveActionChanges(变更集、操作);
}
action.verifyallexpections();
}
私有类MockIdentityResolver:IIdentityResolver
{
公共GenomeUser GetUser(用户标识)
{
var user=mocks.DynamicMock();
user.Username=identity.Username;
返回用户;
}
}

你应该看看如何使用,人们似乎普遍认为这是一种更清晰的使用方法。

我已经采纳了你的建议,完全用AAA语法的方式重写了这个东西,现在它工作起来很有魅力。谢谢;)另一个+1来自我的AAA语法;Rhino Mocks的作者Oren Eini提到,他的框架的下一个版本将取消录制/播放语法,只提供AAA语法。
[TestMethod]
public void SaveResponsibleUserFromChangeset()
{
    var action = mocks.StrictMock<GenomeAction>();
    var changeset = new ActionChangeset();
    var identityResolver;
    changeset.ResponsibleUser = new ChangeableProperty<UserIdentity>("Administrator") {IsChanged = true};
    changeset.MarkAll(true);

    using(mocks.Record())
    {
        Expect.Call(action.ResponsibleUser).SetPropertyAndIgnoreArgument();
        identityResolver = new MockIdentityResolver()
    }

    using(mocks.Playback())
    {
        var persistor = new ActionPersistor(identityResolver);
        persistor.SaveActionChanges(changeset, action);
    }

    action.VerifyAllExpectations();
}

private class MockIdentityResolver : IIdentityResolver
{
    public GenomeUser GetUser(UserIdentity identity)
    {
        var user = mocks.DynamicMock<GenomeUser>();
        user.Username = identity.Username;
        return user;
    }
}