2016-04-29 4 views
2

Ich versuche, einige Unit-Tests in F # mit XUnit2 und AutoFixture schreiben und ich habe ein Problem. Ich habe eine Theorie mit benutzerdefinierten Attributen, die von InlineAutoData erbt und der Test Explorer sagt mir immer wieder, dass keine Tests gefunden wurden. Wenn ich das Theory-Attribut durch ein Fact-Attribut ersetze, funktioniert es immer noch nicht, aber wenn ich die benutzerdefinierten InlineData-Attribute entferne, wird der Test entdeckt. Tests werden in F # geschrieben, Attribute in einem anderen Projekt jedoch in C#.F # Theorie mit benutzerdefinierten AutoFixture.InlineAutoData nicht in Test Explorer

ich diese Frage Stackoverflow gefunden habe, die ähnlich scheint, aber es mir mein Problem nicht helfen Lösung: AutoFixture in F# UnitTest Project Not Displaying Unit Tests in Test Explorer

Hier ist die Unit-Test-Deklaration:

[<Theory>] 
[<SyntaxTreeInlineAutoData("Class/SingleClass.cs", 1)>] 
[<SyntaxTreeInlineAutoData("Class/MultipleClass.cs", 2)>] 
[<SyntaxTreeInlineAutoData("Class/NestedClass.cs", 2)>] 
let ``Inspect_WhenVariousContexts_WithSuccess`` (count, tree : SyntaxTree) = 

Hier Attribute Erklärungen:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] 
public class SyntaxTreeInlineAutoDataAttribute : InlineAutoDataAttribute 
{ 
    #region Constructors 

    public SyntaxTreeInlineAutoDataAttribute(string sourceFile, params object[] values) 
     : base(new SyntaxTreeAutoDataAttribute(sourceFile), values) 
    { 
    } 

    #endregion 
} 

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] 
public class SyntaxTreeAutoDataAttribute : AutoDataAttribute 
{ 
    #region Constructors 

    public SyntaxTreeAutoDataAttribute() : this(null) 
    { 
    } 

    public SyntaxTreeAutoDataAttribute(string sourceFile) 
     : base(new Fixture().Customize(new SyntaxTreeCustomization(sourceFile))) 
    { 
    } 

    #endregion 
} 

[Bearbeiten]

Das Projekt ist ein Port eines C# -Projekts. Unit Tests funktionierte gut mit dem benutzerdefinierten Attribut. Der Fehler trat nur bei Tests auf, die in F # geschrieben wurden.

Alles ist installiert: xUnit2, xUnit.runners.visualstudio und AutoFixture.

Danke für die Hilfe.

+0

Haben Sie # Tests C, die entdeckt zu tun bekommen? Haben Sie xUnit Visual Studio Runner installiert? –

+0

Meine [selbstbeantwortete halbbezogene Frage] (http://stackoverflow.com/questions/35103781/why-is-the-visual-studio-2015-test-runner-not-discovering-my-xunit-v2- tests/35103782 # 35103782) war mit F #, xUnit und VS2015 (aber nicht mit AutoFixture) –

Antwort

1

Ich könnte dieses Problem reproduzieren, und in meiner Repro zumindest war das Problem ein Versionskonflikt. Die meisten Visual Studio-Test-Runner sagen Ihnen das nicht, aber wenn Sie versuchen, die Komponententests mit einem Befehlszeilen-Runner auszuführen, wird der tatsächliche Fehler gemeldet.

In meinem repro, löse ich das Problem, indem das Projekt folgende app.config Datei auf meinem F # und fügte hinzu:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="xunit.core" publicKeyToken="8d05b1bb7a6fdb6c" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.1.0.3179" newVersion="2.1.0.3179" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 
+0

Danke für die schnelle Antwort. Es funktioniert gut mit der Appconfig. Wenn ich das nächste Mal ein Problem habe, werde ich versuchen, Tests von der Kommandozeile aus zu starten. –