[英]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.