Unit testing 使用Rhino Mock进行模拟-MVVM

Unit testing 使用Rhino Mock进行模拟-MVVM,unit-testing,.net-4.0,mocking,rhino-mocks,Unit Testing,.net 4.0,Mocking,Rhino Mocks,我在测试方法中使用Rhino mock进行模拟。有人能看看测试方法中的TODO部分并帮我模拟一下吗 这是我的服务界面: public interface ICustomersServiceAgent { void GetCustomers(EventHandler<GetCustomersCompletedEventArgs> callback); void SaveCustomer(POC.Model.Customer cust, EventHandler<

我在测试方法中使用Rhino mock进行模拟。有人能看看测试方法中的TODO部分并帮我模拟一下吗

这是我的服务界面:

public  interface ICustomersServiceAgent
{
    void GetCustomers(EventHandler<GetCustomersCompletedEventArgs> callback);
    void SaveCustomer(POC.Model.Customer cust, EventHandler<SaveCustomerCompletedEventArgs> callback);
}
我想在上面的ViewModel中测试
SaveCustomerCommand
。 因此,在我的测试方法中,我想模拟
iccustomerserviceagent
接口中的
void SaveCustomer(POC.Model.cust,EventHandler回调)
方法

这是我的测试方法,请参见ToDo部分

[TestMethod]
public void SaveCustomerCommandTest()
{
    var customerServiceMock = MockRepository.GenerateMock<ICustomersServiceAgent>();
    var customerVM = new POC.SilverlightClient.ViewModel.CustomerVM(customerServiceMock);

    //  TO do :  Code to mock SaveCustomer method ///////////////////////////////////

    var saveCustomerCommand = customerVM.SaveCustomerCommand;
    saveCustomerCommand.Execute(null);

    Assert.IsTrue(customerVM.IsSaved);
}
[TestMethod]
public void SaveCustomerCommandTest()
{
var customerServiceMock=MockRepository.GenerateMock();
var customerVM=新的POC.SilverlightClient.ViewModel.customerVM(customerServiceMock);
//TO do:模拟SaveCustomer方法的代码///////////////////////////////////
var saveCustomerCommand=customerVM.saveCustomerCommand;
saveCustomerCommand.Execute(空);
Assert.IsTrue(customerVM.IsSaved);
}

有人能解释一下我是如何做到这一点的吗?

我不明白你为什么要嘲笑SaveCustomer。私有SaveCustomer方法所做的就是调用您已经在模拟的
ServiceAgent
服务。我假设RelayCommand类调用您在构造函数参数中发送的委托,该参数是对SaveCustomer的调用。您是否尝试过按原样运行问题中的单元测试?

我不明白您为什么需要模拟SaveCustomer。私有SaveCustomer方法所做的就是调用您已经在模拟的
ServiceAgent
服务。我假设RelayCommand类调用您在构造函数参数中发送的委托,该参数是对SaveCustomer的调用。您是否已尝试按原样运行问题中的单元测试?

请尝试以下操作:

customerServiceMock.Stub(sa => sa.SaveCustomer(Arg<POC.Model.Customer>.Is.Anything, Arg<EventHandler<SaveCustomerCompletedEventArgs>>.Is.Anything)).WhenCalled(invocation =>
        {
            ((EventHandler<SaveCustomerCompletedEventArgs>)invocation.Arguments[1])(
customerServiceMock, 
new SaveCustomerCompletedEventArgs { Result = true });
        });
customerServiceMock.Stub(sa=>sa.SaveCustomer(Arg.Is.Anything,Arg.Is.Anything))。调用时(调用=>
{
((EventHandler)invocation.Arguments[1])(
customerServiceMock,
新建SaveCustomerCompletedEventArgs{Result=true});
});
尝试以下操作:

customerServiceMock.Stub(sa => sa.SaveCustomer(Arg<POC.Model.Customer>.Is.Anything, Arg<EventHandler<SaveCustomerCompletedEventArgs>>.Is.Anything)).WhenCalled(invocation =>
        {
            ((EventHandler<SaveCustomerCompletedEventArgs>)invocation.Arguments[1])(
customerServiceMock, 
new SaveCustomerCompletedEventArgs { Result = true });
        });
customerServiceMock.Stub(sa=>sa.SaveCustomer(Arg.Is.Anything,Arg.Is.Anything))。调用时(调用=>
{
((EventHandler)invocation.Arguments[1])(
customerServiceMock,
新建SaveCustomerCompletedEventArgs{Result=true});
});

Yes。但它不起作用,因为SaveCustomer方法不模拟。它只模拟ICCustomersServiceAgent。因此我想模拟SaveCustomer方法。不幸的是,我不能这样做。如果您编辑您的问题来描述单元测试如何“不起作用”,那么人们将了解更多有关您尝试做什么的信息,并且可能能够提供帮助。是的,但它不起作用,因为SaveCustomer方法不模拟。它只模拟ICCustomersServiceAgent。因此我想模拟SaveCustomer方法。不幸的是,我不能这样做。如果您编辑您的问题来描述单元测试如何“不起作用”,那么人们将了解有关您尝试做什么的更多信息,并且可能能够提供帮助。