7

When I run my tests today with xUnit v2, I typically use a naming convention like:

[Fact(DisplayName= "Method Will Do Something")] public void Method_Will_Do_Something() { }

What extensibility point can I plug into that will allow me set my test display name based on the naming conventions of my test method?

cecilphillip
  • 11,446
  • 4
  • 36
  • 40

2 Answers2

7

The simplest way: Custom fact attribute, discoverer, and test case.

Example: https://github.com/xunit/samples.xunit/tree/master/RetryFactExample

For your custom test case, derive from XunitTestCase and override the Initialize() method. After calling base.Initialize(), set the DisplayName property appropriately.

You can see the default behavior for XunitTestCase here: https://github.com/xunit/xunit/blob/master/src/xunit.execution/Sdk/Frameworks/XunitTestCase.cs

Brad Wilson
  • 67,914
  • 9
  • 74
  • 83
3

Create a custom class for your fact

public sealed class MyFactAttribute : FactAttribute
{
    public MyFactAttribute([CallerMemberName] string memberName = null)
    {
        DisplayName = memberName;
    }
}

And use as follows

[MyFact]
public void FileSystemProvider_Sync()
Steve Drake
  • 1,968
  • 2
  • 19
  • 41