gpt4 book ai didi

asp.net-mvc - 如何使这个 ASP.NET MVC Controller 更易于测试?

转载 作者:行者123 更新时间:2023-12-03 17:20:39 24 4
gpt4 key购买 nike

我有一个覆盖 OnActionExecuting 的 Controller 并做这样的事情:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
string tenantDomain = filterContext.RouteData.Values["tenantDomain"] as string;
if (!string.IsNullOrWhiteSpace(tenantDomain))
{
using (var tx = BeginTransaction())
{
this.Tenant = repo.FindOne(t => t.Domain == tenantDomain);
}
}
}
Tenant是具有私有(private) setter 的 protected 属性。类本身是一个抽象的基础 Controller ,我的真实 Controller 是从它派生而来的。我在其他 Controller 中的代码看起来很像这样:
if (Tenant == null)
{
// Do something
}
else
{
// Do something else
}

如何测试此代码?我需要做的是以某种方式设置租户属性,但我不能,因为:
  • 它是 protected 属性(property),
  • 它有一个私有(private)二传手

  • 更改 Tenant 的可见性“感觉”不对。对我的派生 Controller 进行单元测试的替代方法是什么?

    最佳答案

    这是我的做法:

    在您的测试项目中创建一个从抽象 Controller 继承的具体类,并将租户公开为公共(public)属性。在测试项目中使用 mock 或 dummy 代码并没有错(当然,只是方便测试的 dummy 代码不应该出现在生产项目中)。

    如果这不适合您的情况;您可以使用 Visual Studio 的 Private Accessor Assembly 功能来生成可以访问租户属性的类型。它在 IDE 中可用,or in command-line form .

    关于asp.net-mvc - 如何使这个 ASP.NET MVC Controller 更易于测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3008420/

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