我有我自己的自定義授權屬性,我試圖檢查我的控制器方法,看看他們是否有正確的角色。現在我的自定義授權標籤中包含數據庫代碼。如何在asp.net mvc中模擬AuthorizeAttribute?
我嘲笑它的方式似乎不工作,因爲我發現反射的東西似乎只是通過沒有參數,所以我的Authorize屬性中的默認構造函數被擊中創建一個新的服務層對象,創建一個存儲庫對象(殺死單元測試)。我AutorizeAttribute
public MyAuthorize()
{
authorize = new ServiceLayer();
}
public MyAuthorize(IServicelayer layer)
{
authorize = layer;
}
的
var indexAction = typeof(Controller).GetMethod(method);
var authorizeAttributes = indexAction.GetCustomAttributes(typeof(AuthorizeAttribute), true);
//Assert
Assert.That(authorizeAttributes.Length > 0, Is.True);
foreach (AuthorizeAttribute att in authorizeAttributes)
{
Assert.That(att.Roles, Is.EqualTo(roles));
}
構造反射的東西不斷叫我的默認構造函數。我怎樣才能通過模擬服務層或什麼?
謝謝
爲什麼你有一個重載的構造函數爲屬性在所有?在應用該屬性時,您永遠無法使用重載的構造函數,因此它沒有任何好處。我懷疑它完全是爲了Testability而存在的,但是如果你也不能在生產場景中使用它,它會給我一個代碼味道。 –
我不同意,馬克。這是用於測試的IoC和DI的完美可接受的方法。在實時執行過程中不採取該路線並不重要。 –