Как получить аргумент 'DisplayName' атрибута xUnit Fact внутри метода теста Fact - PullRequest
1 голос
/ 04 февраля 2020

        [Fact(DisplayName = "Test Demo Display Name")]
        [Trait("Category", "Internal")]
        [Trait("Category", "All")]
        public void Demo()
        {

            // I like to get the DisplayName 'Test Demo Display Name' here(inside this function) for    furthur processing.


        }

Я хотел бы получить DisplayName «Test Demo Display Name» здесь (внутри функции) для дальнейшей обработки. Как это сделать? Я знаю, что есть некоторая возможность получить подробности о чертах с помощью класса TraitsHelper. Существует ли аналогичный подход для атрибута Facts?

1 Ответ

1 голос
/ 04 февраля 2020

Я не уверен, что в xUnit есть какой-то конкретный механизм c, чтобы помочь вам сделать это, но вы можете легко написать свой собственный помощник для этого.

using System.Diagnostics;
using System.Linq;
static class XUnitHelper
{
    internal static string FactDisplayName()
    {
        var frame = new StackFrame(1, true);
        var method = frame.GetMethod();
        var attribute = method.GetCustomAttributes(typeof(Xunit.FactAttribute), true).First() as Xunit.FactAttribute;

        return attribute.DisplayName;
    }
}

Внутри вашего устройства тестовый метод, вызов XUnitHelper.FactDisplayName(). Конечно, это не будет работать, если есть какое-либо вложение - например, если вы вызываете этот помощник в другом методе, который сам вызывается из метода модульного теста, оформленного Fact. Для обработки подобного случая вам нужно написать более сложный код, проходящий через стек (фактически, именно поэтому 1 передается в конструктор StackFrame; мы хотим пропустить информацию стека для сам вспомогательный метод).

...