However, I have found that while 400 of these tests can run (in order), that certain tests either hang the xUnit runner, or bring it down entirely.
I don't care if certain tests are not able to run on Linux, certain tests are to do with the DTC and some unmanaged gumph that we don't need to support there.
What I do want however, is to apply an ignore to those tests, and have the fact that the test was ignored flagged properly in the build output.
The question can be boiled down to I guess a number of possible solutions
If I could avoid modifying the original code too much that would be grand, as the code isn't really mine to change, and applying lots of cross-platform hacks probably won't go down too well.
XUnit v2.0 is now available. Skippable tests are supported by it directly. Use:
[Fact (Skip = "specific reason")]
I would avoid externalising skipping tests (i.e. a config/command file if it's possible). This somewhat goes against making the tests easy to run and trustworthy. Making the tests ignored in code is the safest approach when other people start to get involved.
I could see a number of options, here are two that involve modification of existing code.
In the VS Solution, define another configuration that defines a precompiler flag MONOWIN
(just so that it's explicitly a flag the says that it is for code compiled on Windows for use on Mono).
Then define an attribute that will make the test ignored when compiled for Mono:
public class IgnoreOnMonoFactAttribute : FactAttribute { #if MONOWIN public IgnoreOnMonoFactAttribute() { Skip = "Ignored on Mono"; } #endif }
It's actually hard to find any advantages to this method as it involves mocking with the original solution and adds another confiration that needs to be supported.
Here is a similar solution to option1, except no separate configuration is required:
public class IgnoreOnMonoFactAttribute : FactAttribute { public IgnoreOnMonoFactAttribute() { if(IsRunningOnMono()) { Skip = "Ignored on Mono"; } } /// <summary> /// Determine if runtime is Mono. /// Taken from http://stackoverflow.com/questions/721161 /// </summary> /// <returns>True if being executed in Mono, false otherwise.</returns> public static bool IsRunningOnMono() { return Type.GetType("Mono.Runtime") != null; } }
xUnit runner will run a method twice if it is marked with [Fact]
and [IgnoreOnMonoFact]
. (CodeRush doesn't do that, in this case I assume xUnit is correct). This means that any tests methods must have [Fact]
replaced with [IgnoreOnMonoFact]
CodeRush test runner still ran the [IgnoreOnMonoFact]
test, but it did ignore the [Fact(Skip="reason")]
test. I assume it is due to CodeRush reflecting xUnit and not actually running it with the aid of xUnit libraries. This works fine with xUnit runner.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With