webapi:unittest ActionFilterAttribute OnActionExecutingAsync with moq

时间:2015-02-26 10:10:21

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

编辑:Why doesn't Moq run the overridden ToString method?给出提示。我必须将filtermock.CallBase设置为true。现在它有效。

我正在尝试为asp.net webapi项目编写单元测试。我想要做的是,用相应的过滤器测试一个函数。我设置了控制器和过滤器moq对象,如下所示:

var filtermock= new Mock<MyActionFilterAttribute>();
filtermock.SetupGet(attr => attr.UserId).Returns(userName);
[...]
var controllermock = new Mock<MyController>();
var filtermock = new Mock<MyActionFilterAttribute>();

unittest看起来像这样:

var controller = controllermock.Object;
var filter = filtermock.Object;
await filter.OnActionExecutingAsync(null, CancellationToken.None);
await controller.MyTestFunction();
await filter.OnActionExecutedAsync(null, CancellationToken.None);

问题是,当我运行/调试测试时,被调用的函数OnActionExecutingAsync和OnActionExecudedAsync没有被调用。我想调用ActionFilterAttribute的基类?谁能给我一个提示我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

您如何期待过滤器被称为?过滤器模块不会与控制器模块相关联,因此控制器模块甚至不知道过滤器模块。

这是我试图解决自己的问题:如何将动作过滤器注入控制器。