C # Отражение / NUnit — функция, находящаяся в общедоступном поле экземпляра объекта, является частной. Почему? Как мне обернуть ее, чтобы сделать ее общедоступной?

#delegates #nunit #func #system.reflection #methodinfo

#делегаты #nunit #функция #system.reflection #methodinfo

Вопрос:

Чего я пытаюсь достичь / Почему: я пытаюсь расширить NUnit, чтобы распознавать делегатов функции в экземпляре определенного типа класса в качестве модульных тестов. Я использую пользовательский атрибут, который реализует IFixtureBuilder — это интерфейс, который вы используете, когда хотите экстраполировать тестовый метод NUnit из чего-то другого, кроме метода, украшенного [Test] .

Я могу получить ссылку на функции и их MethodInfo, но NUnit позволит мне создать метод тестирования только из объектов MethodInfo, где IsPublic == true . Рассмотрим пример, набросанный здесь:

https://dotnetfiddle.net/JHNBm6

В моем примере выше переменная ‘Свойство IsPublic firstMethod имеет значение false . Чтобы я распознал эту функцию как метод тестирования NUnit, она должна быть общедоступной.

Почему этот делегат функции считается закрытым? Мои списки находятся в общедоступном поле экземпляра TestClass. Есть ли способ «обернуть» вызов этих функций через System.Хитрость с отражением, чтобы у меня был общедоступный MethodInfo?

Комментарии:

1. Пожалуйста, включите код в свой вопрос. Делегат компилируется в частный метод, вот почему он частный. Можете ли вы также показать пример, как вы хотели бы его использовать? Вы могли бы просто обернуть делегат в общедоступный метод : public Func<Task<book>> MakePublic(Func<Task<Book>> Func) => func; .

Ответ №1:

Он возвращает false, поскольку вы добавляете анонимную функцию в список. Попробуйте добавить ниже, и вы получите IsPublic == true

 public class TestClass
{
    public List<Func<Task<bool>>> tests = new List<Func<Task<bool>>>();

    public TestClass()
    {
        tests.Add(TestMethod1);
    }

    public Task<bool> TestMethod1()
    {
        return Task.FromResult(true);
    }

}