Почему мой Дополнительный Метод не обнаруживается в моем тестовом классе?

Я создал дополнительный названный метод 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, но это не работало также. Почему?

Или я иду об этом неправильным путем?

5
задан Robert Harvey 26 March 2010 в 17:29
поделиться

3 ответа

Убедитесь, что вы ve:

  1. сделал класс static
  2. сделал класс доступным для вызывающего кода
  3. включил this до того, как тип для расширения
  4. построил проект, содержащий добавленное расширение
  5. ссылка на проект в вашем проекте модульного тестирования
  6. добавила using mypackage; к любому исходному файлу, который использует метод расширения, если ваш метод расширения содержится внутри другого пакета

Обратите внимание, что вы ' У меня также есть (я предполагаю) опечатка в вашем примере в том, что метод не находится в классе.

Наконец, я бы не стал помещать методы в официальные пространства имен .NET. Это может сбить с толку только тех, кто придет после вас, кто может подумать, что метод является официально поддерживаемым, хотя на самом деле он является вашим собственным и содержится в вашем проекте.

21
ответ дан 18 December 2019 в 06:11
поделиться

Я подозреваю, что это как-то связано с тем, что вы добавили метод расширения в существующее пространство имен System.Security.Principal. Убедитесь, что вы ссылаетесь на проект, определяющий метод расширения, или попробуйте сделать это с другим пространством имен.

3
ответ дан 18 December 2019 в 06:11
поделиться

Метод расширения должен находиться в статическом классе. Где находится ваш статический класс? Компилируется ли ваш код?

2
ответ дан 18 December 2019 в 06:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: