ReSharper and xUnit.net
Those of you who have switched over to xUnit.Net may have a received a nasty surprise with the 'type members layout' feature of ReSharper: it doesn't respect method attributes. Namely, you can tell it to not reorder methods in an NUnit fixture like this:
<Pattern>
<Match>
<HasAttribute CLRName="NUnit.Framework.TestFixture"/>
</Match>
</Pattern>
But you cannot tell it to not reorder your xUnit methods like this:
<Pattern>
<Match>
<And Weight="100">
<Kind Is="method"/>
<HasAttribute CLRName="Xunit.TestAttribute" Inherit="false"/>
</And>
</Match>
</Pattern>
Apparently it will only look for attributes on classes and interfaces. In the meantime, I think the simplest solution is to just create a fake attribute you can add to your fixture.
public class ReSharperNoReorderAttribute : Attribute
{
}
And the appropriate pattern match to ReSharper:
<Pattern>
<Match>
<HasAttribute CLRName="ReSharperNoReorder"/>
</Match>
</Pattern>
All should be well after that.
Comments
- Anonymous
October 02, 2007
This sounds quite strange. What do you mean with "don't reorder method"??? It's clear when entire class members are not re-layouted, but how can you not reorder single member????Anyway, feel free to contact me at Eugene.Pasynkov (at) jetbrains.com to solve this problem in the future - Anonymous
October 03, 2007
All I'm saying is that I don't want to re-order methods that are matched by a given attribute.The documentation, as it is, doesn't say that I can't use the <match> attribute for <kind is="method"> and <HasAttribute CLRName> together, so why would I assume this wouldn't work? :)Just for reference, xUnit doesn't have a [Fixture] class attribute like NUnit and MSTest do. I still don't want my unit tests re-ordered. - Anonymous
October 03, 2007
The comment has been removed - Anonymous
October 04, 2007
It's even more than that. You don't want ANYTHING in the class to be rearranged if the class has [Test] methods. - Anonymous
October 04, 2007
True. If there are non-[Test] methods, I want them left exactly where they are.