【发布时间】:2016-08-18 22:13:13
【问题描述】:
我正在尝试编写一个测试用例,以确认传递给被测方法的参数值是否用于调用作为参数传递给模拟服务上的方法的委托函数。下面的例子说明了我在做什么:
被测方法:
public IList<IResultData> GetResultData(int id)
{
Func<IExternalInterface, List<ExternalData> getDataMethod = client => client.GetExternalData(id);
List<ExternalData> externalDataList = serviceClient.ExecuteService(getDataMethod, "GetExternalData");
var result = new List<ResultData>();
//Some code to convert externalDataList into an IList<IResultData>
return result;
}
测试方法:
[TestMethod]
public void TestMethodCall()
{
var mockServiceClient = MockRepository.GenerateMock<IServiceClient>();
mockServiceClient.Expect(x => x.ExecuteService(
Arg<Func<IExternalInterface, List<ExternalData>>.Is.NotNull,
Arg<string>.Is.Equal("GetExternalData")));
var myClass = new MyClass(mockServiceClient);
var result = myClass.GetResultData(3);
//Some assertions that result is as expected.
}
有没有办法断言传递给 Execute 方法的函数是从测试方法调用 GetResultData() 传递的 id 3?被模拟的服务位于不受我控制的库中,因此我无法更改它的签名。
【问题讨论】:
-
你试过我的答案了吗?
-
抱歉,前几天我在做别的事情。我花了一些时间来了解您的解决方案,但我现在理解它并让它工作。 -谢谢!
标签: c# unit-testing lambda assert rhino-mocks