我有一个覆盖 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
}
如何测试此代码?我需要做的是以某种方式设置租户属性,但我不能,因为:
更改
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/