#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);
}
}