gpt4 book ai didi

c# - 基本 Controller 中的属性不会在 mvc5 的单元测试中触发

转载 作者:太空狗 更新时间:2023-10-29 23:53:25 26 4
gpt4 key购买 nike

我知道这不是单元测试的正确方法,但我们的基本 Controller 上有一个 ActionFilterAttribute,它在我们的单元测试期间永远不会被触发。我知道我们应该独立测试它,但我们希望将它集成到我们端到端的整体测试中。

  [ThemeModel]
public class BaseController : Controller
{
public MyModel Context { get; set; }
}

当我们从继承的 Controller 运行测试时,如何集成我的属性?我了解属性与 Controller 和 mvc 框架的一部分无关。

谢谢...

最佳答案

我认为有两种选择。 1 是你已经在做的,我不会改变它。 2是你问题的答案。我相信两者都很好。

  1. 将 Controller 和过滤器的单元测试分开。这对 UT 是合适的,因为你的 Controller 和过滤器不应该相互硬依赖。通过这种方式,您将知道每个人都可以自己正常工作(单一职责原则)。
  2. 创建一组单独的测试来实现 HttpContextBase .我假设你已经有一个模拟 HttpContextBase进行 session 或 cookie 模拟,所以我将只突出显示您的特定过滤器的主要内容。 (如果不这样做,只需搜索 HttpContextBase 和单元测试)。

    public class MockHttpContext : HttpContextBase
    {
    public MockHttpContext()
    {
    MockRequest = new Mock<HttpRequestBase>();
    // .. etc ..
    var actionExecutingContext = new Mock<ActionExecutingContext>();
    actionExecutingContext.SetupGet(x => x.HttpContext).Returns(this);
    var filter = new ThemeModelAttribute();
    filter.OnActionExecuting(actionExecutingContext.Object);
    // OnActionExecuted has similar setup if needed.
    }
    }

喂!

关于c# - 基本 Controller 中的属性不会在 mvc5 的单元测试中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33100984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com