簡體   English   中英

模擬調用操作以使用Rhino Mocks進行單元測試

[英]Mocking InvokeOperation for Unit Testing using Rhino Mocks

我有一個方法的數據服務接口:

   void GetDataByLocationId(Guid locationId, Action<InvokeOperation<IEnumerable<DataValue>>> callback);

我想測試一個依賴於此數據服務接口的類,並想模擬出上述方法。

我將模擬設置為:

_mocks = new MockRepository();

    var dataLoadOperation = _mocks.StrictMock<InvokeOperation<IEnumerable<DataValue>>>();
    Action<InvokeOperation<IEnumerable<DataValue>>> dataValueCallback = null;

然后在我的測試執行中:

    var locationId = Guid.NewGuid();
    var values = // something //
    using (_mocks.Unordered())
    {
            Expect.Call(() => _dataService.GetDataByLocationId(Arg<Guid>.Is.Equal(locationId), Arg<Action<InvokeOperation<IEnumerable<DataValue>>>>.Is.Anything));
            LastCall.Callback(new Func<Action<InvokeOperation<IEnumerable<DataValue>>>, bool>(c => { dataValueCallback = c; return true; }));
            dataLoadOperation .Stub(x => x.HasError).Return(false);
            dataLoadOperation .Stub(x => x.Value).Return(values);
    }

但是它永遠不會執行...事實證明:

System.ServiceModel.DomainServices.Client.InvokeOperation

是一個密封的類,Rhino Mocks在運行時拋出異常

無法創建密封類的模擬

我正在尋找改進設計以支持該測試用例的建議; 仍在使用模擬。

我將創建一個接口來表示您與InvokeOperation類的交互。 創建一個“默認”實現,該實現簡單地委派給實際的InvokeOperation類。 然后,您可以在模擬過程中將接口存根。

該接口不需要是InvokeOperation的成員和屬性的完整副本,而只是您在應用程序中使用的成員和屬性的完整副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM