gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:48:53 25 4
gpt4 key购买 nike

我正在尝试使用 RhinoMocks 进行试验,我不得不说我是一个新手,可能我在这里没有得到一些明显的东西。我正在做的是这样的:

    [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;
}
}

目的是进行一个非常简单的测试,检查 SaveActionChanges 方法是否设置了 ResponsibleUser 属性。作为其中的一部分,它需要使用解析器解析用户身份,为此我提供了一个模拟实现。不幸的是,我似乎不能在回放模式中返回另一个模拟,因为它说(在第二次使用的右括号中)当对象(类型为 GenomeUser)在记录中时,操作无效状态

关于导致问题的原因以及如何克服它的任何想法?

最佳答案

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

[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;
}
}

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

关于c# - 使用 RhinoMocks .NET 进行简单模拟的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2208134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com