使用ODataQueryOptions编写单元测试

时间:2014-06-04 18:48:35

标签: unit-testing asp.net-web-api odata moq

我是为WebAPI编写测试用例的新手。我已经看过过去问过类似的问题,但没有回答,但是我想知道如果他们有ODataQueryOptions作为参数的一部分,我将如何测试我的API。见下文:

public IQueryable<Item> GetByIdAndLocale(ODataQueryOptions opts, 
                                         Guid actionuniqueid, 
                                         string actionsecondaryid)

我必须要这个吗?如果是这样,这看起来怎么样?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

对于ODataQueryOptions透视图,您可能希望测试所有OData查询选项是否可以与您的Function一起使用。首先,您需要创建一个ODataQueryOptions实例。这是一个例子:

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUri);
ODataQueryContext context = new ODataQueryContext(EdmCoreModel.Instance, elementType);
ODataQueryOptions options = new ODataQueryOptions(context, request);

因此,您需要创建自己的EDM模型来替换 EdmCoreModel.Instance ,并将 requestUri 替换为您的查询。 ODataQueryContext中的 elemntType 是&#34;正在查询的集合的元素的CLR类型&#34;。

答案 1 :(得分:0)

我无法从措辞中说出来,但上面的调用(GetByIdAndLocale)是您要测试的Web API,还是您正在尝试测试调用它的内容?

使用模拟或存根来替换被测单元(UUT)中的依赖项。如果您正在测试 GetByIdAndLocale(),那么您不会模拟它,如果它调用其他将ODataQueryOptions作为参数的东西,您可以使用Moq来存根/模拟 调用

如果您正在测试某个调用GetByIdAndLocale()的单元,那么,是的,您可以进行模拟。你究竟是如何做到这一点取决于目标(检查传递正确的值与检查返回的IQueryable是否正确处理),基本上与It.IsAny()或某些匹配器匹配。

你想测试哪个?
GetByIdAndLocale(),它调用它或它调用的东西(未显示)?

您对验证感兴趣吗?
是否传递了正确的选项或处理来自模拟调用的返回值?

相关问题