【问题标题】:webapi: unittest ActionFilterAttribute OnActionExecutingAsync with moqwebapi:单元测试 ActionFilterAttribute OnActionExecutingAsync 与最小起订量
【发布时间】:2015-02-26 10:10:21
【问题描述】:

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

我正在尝试为 asp.net webapi 项目编写单元测试。我想要做的是,用相应的过滤器测试一个函数。我像这样设置控制器和过滤器起订量对象:

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

单元测试如下所示:

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 的基类被调用了?谁能给我一个提示我在这里做错了什么?

【问题讨论】:

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


    【解决方案1】:

    您希望如何调用 filtermock? filtermock 似乎没有与 controllermock 关联,因此 controllermock 甚至不知道 filtermock。

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

    【讨论】:

    • 我直接在单元测试中调用它:await filter.OnActionExecutingAsync(context, cancellationToken); await controller.DoSomeStuff(); await filter.OnActionExecutedAsync(context,cancellationToken.None);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    相关资源
    最近更新 更多