Skip to content

Commit fdf75ab

Browse files
committed
#2334: Add assembly-level support for BeforeAfterTestAttribute (v2)
1 parent ba06476 commit fdf75ab

File tree

5 files changed

+24
-4
lines changed

5 files changed

+24
-4
lines changed

src/xunit.core/Sdk/BeforeAfterTestAttribute.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Xunit.Sdk
77
/// Base attribute which indicates a test method interception (allows code to be run before and
88
/// after the test is run).
99
/// </summary>
10-
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
10+
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
1111
public abstract class BeforeAfterTestAttribute : Attribute
1212
{
1313
/// <summary>

src/xunit.execution/Sdk/Frameworks/Runners/XunitTestCaseRunner.cs

+1
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ protected virtual List<BeforeAfterTestAttribute> GetBeforeAfterTestAttributes()
130130

131131
return beforeAfterTestCollectionAttributes.Concat(TestClass.GetTypeInfo().GetCustomAttributes(typeof(BeforeAfterTestAttribute)))
132132
.Concat(TestMethod.GetCustomAttributes(typeof(BeforeAfterTestAttribute)))
133+
.Concat(TestClass.GetAssembly().GetCustomAttributes(typeof(BeforeAfterTestAttribute)))
133134
.Cast<BeforeAfterTestAttribute>()
134135
.ToList();
135136
}

test/test.xunit.execution/Acceptance/CollectionAcceptanceTests.cs

+4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ private void AssertMessageSequence(IEnumerable<IMessageSinkMessage> results, str
2929
message => Assert.IsAssignableFrom<ITestStarting>(message),
3030
message => Assert.IsAssignableFrom<ITestClassConstructionStarting>(message),
3131
message => Assert.IsAssignableFrom<ITestClassConstructionFinished>(message),
32+
message => Assert.IsAssignableFrom<IBeforeTestStarting>(message), // from XunitTestCaseRunnerTests.BeforeAfterOnAssembly
33+
message => Assert.IsAssignableFrom<IBeforeTestFinished>(message), // from XunitTestCaseRunnerTests.BeforeAfterOnAssembly
34+
message => Assert.IsAssignableFrom<IAfterTestStarting>(message), // from XunitTestCaseRunnerTests.BeforeAfterOnAssembly
35+
message => Assert.IsAssignableFrom<IAfterTestFinished>(message), // from XunitTestCaseRunnerTests.BeforeAfterOnAssembly
3236
message =>
3337
{
3438
var passed = Assert.IsAssignableFrom<ITestPassed>(message);

test/test.xunit.execution/Acceptance/Xunit2AcceptanceTests.cs

+9
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,15 @@ public void SinglePassingTest()
7777
Assert.Equal(classConstructionFinished.TestCase.DisplayName, classConstructionFinished.Test.DisplayName);
7878
},
7979
message =>
80+
{
81+
// From XunitTestCaseRunnerTests.BeforeAfterOnAssembly
82+
var beforeTestStarting = Assert.IsAssignableFrom<IBeforeTestStarting>(message);
83+
Assert.Equal("BeforeAfterOnAssembly", beforeTestStarting.AttributeName);
84+
},
85+
message => Assert.IsAssignableFrom<IBeforeTestFinished>(message),
86+
message => Assert.IsAssignableFrom<IAfterTestStarting>(message),
87+
message => Assert.IsAssignableFrom<IAfterTestFinished>(message),
88+
message =>
8089
{
8190
var testPassed = Assert.IsAssignableFrom<ITestPassed>(message);
8291
Assert.Equal(testPassed.TestCase.DisplayName, testPassed.Test.DisplayName);

test/test.xunit.execution/Sdk/Frameworks/Runners/XunitTestCaseRunnerTests.cs

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1-
using System.Threading;
1+
using System.Linq;
2+
using System.Threading;
23
using NSubstitute;
34
using Xunit;
45
using Xunit.Sdk;
56

7+
[assembly: XunitTestCaseRunnerTests.BeforeAfterOnAssembly]
8+
69
public class XunitTestCaseRunnerTests
710
{
811
[Fact]
@@ -16,9 +19,11 @@ public static void BeforeAfterTestAttributesComeFromTestCollectionAndTestClassAn
1619

1720
var runner = new XunitTestCaseRunner(testCase, "Display Name", "Skip Reason", new object[0], new object[0], messageBus, aggregator, tokenSource);
1821

19-
Assert.Collection(runner.BeforeAfterAttributes,
20-
attr => Assert.IsType<BeforeAfterOnCollection>(attr),
22+
Assert.Collection(
23+
runner.BeforeAfterAttributes.OrderBy(a => a.GetType().Name),
24+
attr => Assert.IsType<BeforeAfterOnAssembly>(attr),
2125
attr => Assert.IsType<BeforeAfterOnClass>(attr),
26+
attr => Assert.IsType<BeforeAfterOnCollection>(attr),
2227
attr => Assert.IsType<BeforeAfterOnMethod>(attr)
2328
);
2429
}
@@ -34,6 +39,7 @@ class ClassUnderTest
3439
public void Passing() { }
3540
}
3641

42+
public class BeforeAfterOnAssembly : BeforeAfterTestAttribute { }
3743
class BeforeAfterOnCollection : BeforeAfterTestAttribute { }
3844
class BeforeAfterOnClass : BeforeAfterTestAttribute { }
3945
class BeforeAfterOnMethod : BeforeAfterTestAttribute { }

0 commit comments

Comments
 (0)