diff --git a/Allure.XUnit/AllureXunitHelper.cs b/Allure.XUnit/AllureXunitHelper.cs index 1e5fe56d..08d08343 100644 --- a/Allure.XUnit/AllureXunitHelper.cs +++ b/Allure.XUnit/AllureXunitHelper.cs @@ -177,7 +177,7 @@ private static void AddDistinct(this List<Label> labels, string labelName, strin private static void UpdateTestDataFromAttributes(TestResult testResult, ITestCase testCase) { - var classAttributes = testCase.TestMethod.TestClass.Class.GetCustomAttributes(typeof(IAllureInfo)); + var classAttributes = GetCustomAttributesRecursive(testCase.TestMethod.TestClass.Class, typeof(IAllureInfo)); var methodAttributes = testCase.TestMethod.Method.GetCustomAttributes(typeof(IAllureInfo)); foreach (var attribute in classAttributes.Concat(methodAttributes)) @@ -279,5 +279,24 @@ private static string BuildFullName(ITestCase testCase) return $"{testCase.TestMethod.TestClass.Class.Name}.{testCase.TestMethod.Method.Name}{parametersSegment}"; } + + private static IEnumerable<IAttributeInfo> GetCustomAttributesRecursive(ITypeInfo typeInfo, Type attributeType) + { + foreach (var type in GetInheritanceTree(typeInfo).Reverse()) + { + foreach (var attribute in type.GetCustomAttributes(attributeType.AssemblyQualifiedName)) + yield return attribute; + } + + static IEnumerable<ITypeInfo> GetInheritanceTree(ITypeInfo typeInfo) + { + var currentType = typeInfo; + while (currentType.ToRuntimeType() != typeof(object)) + { + yield return currentType; + currentType = currentType.BaseType; + } + } + } } } \ No newline at end of file