我正在尝试使用 RhinoMock 来模拟 wcf 服务。
假设我有以下服务:
[OperationContract]
List<User> SearchUsers(UserSearchFilter filter);
使用 Visual Studio 添加此服务将生成一个代理,该代理具有如下接口(interface):
public interface ResourceService {
System.IAsyncResult BeginSearchUsers(UserSearchFilter filter, System.AsyncCallback callback, object asyncState);
ObservableCollection<User> EndSearchUsers(System.IAsyncResult result);
}
然后我创建一个使用此服务的 ViewModel,如下所示:
private ResourceService service;
public ViewModelBase(ResourceService serv)
{
service = serv;
var filter = new UserSearchFilter();
service.BeginSearchUsers(filter, a =>
{
this.Users = service.EndSearchUsers(a);
}, null);
}
那么问题来了。如何使用 RhinoMock 模拟此服务?
[TestMethod]
public void UserGetsPopulatedOnCreationOfViewModel()
{
// Is stub the right thing to use?
ResourceService serv = MockRepository.GenerateStub<ResourceService>();
// Do some setup... Don't know how?
var vm = new ViewModel(serv);
Assert.IsTrue(vm.Users.Count > 0);
}
如果有人可以帮助我正确使用 RhinoMock,我真的很高兴
(注意:我使用的是 Silverlight,但我认为这不会改变 RhinoMock 的使用方式)
非常感谢!
最佳答案
我写了一篇关于测试使用 WCF 服务的应用程序的 4-part article。
Part 2 谈到使用 RhinoMocks 模拟服务
Part 3 谈论使用 Moq 模拟异步服务
请注意,第 3 部分可以很容易地转换为 RhinoMocks。我只是想展示不同的模拟框架,并且该技术不依赖于模拟框架。
希望能帮助到你!
编辑
因此,在 Rhino Mocks 中,您可以在设置中执行此操作:
mockService.YourEvent += null;
IEventRaiser loadRaiser = LastCall.IgnoreArguments().GetEventRaiser();
然后在播放中,您执行以下操作:
loadRaiser.Raise(mockService, CreateEventArgs());
您可以在 Phil Haack's blog post 中找到有关 Rhino 中模拟事件的更多信息。
关于wcf - RhinoMock 帮助 : Mocking WCF service,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/805832/