Получить параметр конструктора класса, используя отражение - PullRequest
0 голосов
/ 07 декабря 2018

Я пишу модульные тесты для класса, и я хотел бы иметь отдельные сообщения об исключениях при проверке каждого параметра на null.

Чего я не знаю, так это как реализовать метод GetParameterNameWithReflection ниже:

public class struct SUT
{
    public SUT(object a, object b, object c)
    {
        if (a == null)
        {
            throw new ArgumentNullException(nameof(a));
        }

        // etc. for remaining args

        // actual constructor code
    }    
}

[TextFixture]
public class SutTests
{
    [Test]
    public void constructor_shouldCheckForFirstParameterNull()
    {
        var ex = Assert.Throws<ArgumentNullException>(new Sut(null, new object(), new object()));

        string firstParameterName = GetParameterNameWithReflection(typeof(SUT);)

        Assert.AreEqual(firstParameterName, ex.ParamName);
    }
}

В качестве бонуса приветствуются комментарии о целесообразности этого типа тестирования!

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Этот метод возвращает имя первого параметра первого конструктора.Вы могли бы расширить это для работы с несколькими конструкторами и различными параметрами.Используется класс ParameterInfo .

    public string GetFirstParameterNameWithReflection(Type t)
    {
        return t.GetConstructors()[0].GetParameters()[0].Name;
    }
0 голосов
/ 07 декабря 2018

Как насчет:

static string GetFirstParameterNameWithReflection(Type type)
{
    return type.GetConstructors().Single().GetParameters().First().Name;
}

Это подтверждает, что существует ровно один конструктор, получает параметры, утверждает, что существует хотя бы один такой, и возвращает имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...