Я создал дополнительный названный метод HasContentPermission
на System.Security.Principal.IIdentity
:
namespace System.Security.Principal
{
public static class IdentityExtensions
{
public static bool HasContentPermission
(this IIdentity identity, int contentID)
{
// I do stuff here
return result;
}
}
}
И я называю его как это:
bool hasPermission = User.Identity.HasPermission(contentID);
Работы как очарование. Теперь я хочу к модульному тесту это. Чтобы сделать это, все, что я действительно должен сделать, назвать дополнительный метод непосредственно, таким образом:
using System.Security.Principal;
namespace MyUnitTests
{
[TestMethod]
public void HasContentPermission_PermissionRecordExists_ReturnsTrue()
{
IIdentity identity;
bool result = identity.HasContentPermission(...
Но HasContentPermission
не будет intellisense. Я пытался создать тупиковый класс, который наследовался IIdentity
, но это не работало также. Почему?
Или я иду об этом неправильным путем?
Убедитесь, что вы ve:
this
до того, как тип для расширения using mypackage;
к любому исходному файлу, который использует метод расширения, если ваш метод расширения содержится внутри другого пакета Обратите внимание, что вы ' У меня также есть (я предполагаю) опечатка в вашем примере в том, что метод не находится в классе.
Наконец, я бы не стал помещать методы в официальные пространства имен .NET. Это может сбить с толку только тех, кто придет после вас, кто может подумать, что метод является официально поддерживаемым, хотя на самом деле он является вашим собственным и содержится в вашем проекте.
Я подозреваю, что это как-то связано с тем, что вы добавили метод расширения в существующее пространство имен System.Security.Principal
. Убедитесь, что вы ссылаетесь на проект, определяющий метод расширения, или попробуйте сделать это с другим пространством имен.
Метод расширения должен находиться в статическом классе. Где находится ваш статический класс? Компилируется ли ваш код?