assert

___ answer23451935 ___

Edit 2 xUnit 2 hat letztendlich die Assertions vollständig in eine separate Assembly verschoben. Es gibt sowohl kompilierte als auch reine Quellpakete auf NuGet, und die %code% -Klasse ist partiell. Daher wird %code% sehr einfach erweiterbar (in C #, also), indem die Quellversion des Pakets verwendet wird.

Bearbeiten Für mehr Vollständigkeit: xUnit 2 entfernt diesen Erweiterungspunkt und empfiehlt die Verwendung von Erweiterungsmethoden im Sinne von 'fließenden' Assertion-Bibliotheken.

Zur Vollständigkeit: Hier ist eine Beschreibung des "offiziellen" Weges zur Erweiterung von %code% (der überraschenderweise überhaupt nicht erwähnt wurde, obwohl Brad Wilson sogar an der Diskussion teilnahm).

Ab Version 1.5 (gemäß dem Blog von Brad) unterstützt xUnit.Extensions dies explizit über die Klassen %code% und %code% . Es funktioniert so:

%code% hat eine Eigenschaft namens %code% vom Typ %code% , die alle Methoden auf %code% weiterleitet. Da %code% eine Instanz ist, können Sie Methoden über Erweiterungsmethoden für %code% hinzufügen:

%Vor%

Jetzt müssen Sie Ihre Testklasse von %code% ableiten lassen (zum Verwechseln gibt es auch %code% , was nicht das ist, was Sie wollen), und die %code% -Eigenschaft wird den %code% -Typ "shadow" wenn Sie qualifizieren den Namen nicht explizit.

In Ihrer Testklasse, die von %code% abgeleitet ist, können Sie jetzt

verwenden %Vor%

Der einzige wirkliche Unterschied zu einer eingebauten xUnit-Assertion ist (abgesehen von der Tatsache, dass die Syntaxfärbung für %code% die eines Bezeichners und nicht eines Typs ist), dass bei einem Fehler einfach ein %code% erhalten wird. nicht ein bestimmtes %code% , das Ihnen hypothetisch sagen könnte, wo der Vergleich fehlgeschlagen ist. Aber natürlich könnte man das auch auf die gleiche Weise bauen.

    
___ qstnhdr ___ XUnit erweitern Assert Klasse mit neuen Asserts ___ answer16204198 ___

Sorry, aber du wirst verwirrt (EDIT: und ich auch!). Der %code% von xUnit.net ist %code% und kann daher keine Erweiterungen hinzufügen (obwohl andere Assertion-Bibliotheken diesen Ansatz nicht verwenden, weshalb man erwarten könnte, Erweiterungsmethoden zu verwenden, um %code% zu erweitern). Wenn Sie also im xUnit.net-Universum eine benutzerdefinierte Assertion hinzufügen möchten, fügen Sie eine neue statische Klasse mit einem anderen Namen hinzu.

Sie können Ihren Ansatz nutzen, indem Sie Ihre Klasse ändern von:

%Vor%

zu:

%Vor%

und dann @ BradWilson Trick des Hinzufügens:

%Vor%

am Anfang jeder Datei, die Ihre Erweiterungen benötigt.

Diese Technik ist praktisch für das Hinzufügen von Überladungen, um darüber nachzudenken ....

(Die offensichtliche Schwäche ist, dass Sie nicht mehr als einen direkt über %code% haben können)

    
___ answer36088382 ___

Zusammenfassung der Lösung für xUnit 2 . (Arbeitete für mich für Version 2.1.0 von NuGet.)

Assert ist eine partielle Klasse, die Sie erweitern können, indem Sie ein anderes Teil hinzufügen. Dazu müssen Sie die Assert-Assembly aus Quellen kompilieren. Sie können xunit.assert.source NuGet verwenden, um die Quellen abzurufen.

Die Schritte

  1. Entfernen Sie den Verweis auf das xunit.assert NuGet-Paket aus dem Projekt.
  2. Stattdessen installieren Sie das Paket xunit.assert.source .
  3. Definieren Sie im Namensraum %code% %code% und fügen Sie dort Ihre benutzerdefinierten Behauptungen hinzu.

Beispiel für eine benutzerdefinierte Bestätigung:

%Vor%

Hinweis: Andere Antworten und Bearbeitungen weisen ebenfalls auf die Lösung hin, aber ich brauchte einiges, um es von dort herauszufinden. Ich behaupte auch nicht, dass dies die einzige oder die beste Option ist.

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123extensionmethods ___ Eine Erweiterungsmethode ist eine Sprachfunktion von Swift, Visual Basic.NET und c #. Erweiterungsmethoden ermöglichen es Ihnen, Methoden zu vorhandenen Typen hinzuzufügen, ohne einen neuen abgeleiteten Typ zu erstellen, den Originaltyp neu zu kompilieren oder anderweitig zu ändern. ___ answer48585942 ___

Für xUnit 2 + :

1) Fügen Sie dem Projekt mit Erweiterungen %code% Nuget-Paket hinzu.

2) Erstellen Sie eine partielle Klassendefinition:

%Vor%     
___ tag123asset ___ Eine Assertion ist eine Anweisung, die ein Programm abbricht, wenn es als false ausgewertet wird. Assert wird normalerweise zum Debuggen und für Situationen verwendet, die niemals auftreten sollten. ___ tag123xunitnet ___ xUnit.net ist ein Unit-Test-Tool für .NET Framework. XUnit.net wurde vom ursprünglichen Erfinder von NUnit geschrieben und ist die neueste Technologie für Komponententests für C #, F #, VB.NET und andere .NET-Sprachen. Es funktioniert mit ReSharper, CodeRush und TestDriven.NET. http://xunit.github.io/ ___ qstntxt ___

Ich versuche, die xUnit-Assert-Methode zu erweitern, indem ich Selen-Funktionalität hinzufüge

%Vor%

Aber ich bekomme diesen Kompilierfehler, wenn ich versuche, ihn zu benutzen.

%Vor%

Und der Fehler

%Vor%

Weiß jemand, ob das möglich ist oder wo ich falsch liege?

    
___ answer16201269 ___

Sie benötigen eine Objekteingabe, die als dieses Argument an die Erweiterungsmethode übergeben wird. In Ihrem Fall wäre das die korrekte Syntax

%Vor%

Aber ich nehme an, Sie brauchen keine Instanz der Assert-Klasse oder können sie gar nicht erstellen.

Was Sie versuchen, ist Aufruf der Erweiterungsmethode als statischer Aufruf für die erweiterte Klasse und das wird nicht funktionieren. Aber warum nicht einfach

anrufen %Vor%     
___
2
Antworten

JavaScript Anti-Silent-Techniken zur Anzeige von Fehlern

Was wäre ein guter Weg, um Fehler in JavaScript zu melden, anstatt sich auf Nullen zu verlassen, und undefiniert, wenn Fehler auftreten und eine Funktion nicht fortfahren kann. Ich kann mir drei Ansätze vorstellen: tue nichts eine Ausnahme...
17.07.2010, 01:16
2
Antworten

Zeit für das Kompilieren in Swift?

Ist es möglich, eine Kompilierungszeit-Assert in Swift wie in C ++ static_assert zu erstellen? Vielleicht eine Möglichkeit, Typeinschränkungen für Generics auszunutzen, um einen Compiler-Break zu erzwingen?     
12.06.2014, 05:06
4
Antworten

Freigeben von Speicher in einer anderen DLL

Ich habe eine EXE-Datei mit einer DLL-Datei, die eine andere DLL-Datei verwendet. Diese Situation ist entstanden: In DLL-Datei 1: %Vor% In DLL-Datei 2: %Vor% Im Freigabemodus funktioniert alles einwandfrei. Aber im Debug-Modus habe ic...
28.10.2009, 02:01
5
Antworten

Wie kann man einen Fehler in einem Python-Komponententest in der Methode setUp korrekt melden?

Ich habe einige widersprüchliche Hinweise zur Verwendung von assert in der Methode setUp eines Python-Komponententests gelesen. Ich kann den Schaden nicht sehen, der einen Test versagt, wenn eine Vorbedingung, die auf Test beruht, ausfällt...
10.05.2016, 09:24
4
Antworten

Warum beendet Assert einfach ein Programm, das für das iPhone kompiliert wurde?

Ich debugge eine schwer Assert () 'ed iPhone App (Xcode, Objective-C ++ und Gerätesimulator). In einigen Fällen würde der Assert-Fehler die App einfach beenden, anstatt wie erwartet in den Debugger einzudringen. Ich habe einen Workaround gema...
04.01.2010, 17:41
2
Antworten

Wann Assert in Client & Common GWT-Code verwenden

Es gibt einige Fragen zu StackOverflow, in denen die Frage diskutiert wird, wann man eine assert-Anweisung anstelle einer Ausnahme verwenden sollte. (Beispiele hier , hier , hier , hier und hier . > Allerdings habe ich den Verdacht, dass...
16.05.2011, 20:54
3
Antworten

Alternative für Constexpr-Funktionen

Ich habe einige kurze constexpr -Funktionen in meinen Bibliotheken, die einige einfache Berechnungen durchführen. Ich verwende sie sowohl in Laufzeit- als auch in Kompilierungskontexten. Ich möchte einige Behauptungen im Rumpf dieser Funkt...
27.09.2014, 08:14
3
Antworten

Assert in Try..Catch Block wird abgefangen

Ich bin gerade auf ein interessantes Verhalten gestoßen - Assert wurde von Catch block abgefangen. %Vor% Assert gibt AssertFailedException und es wird von catch abgefangen. Ich dachte immer, dass, wenn Assert fehlschlägt, der...
15.02.2013, 06:20
4
Antworten

Was ist eine Standardbezeichnung eines Switches?

Sagen wir, ich habe eine Aufzählung. %Vor% und später habe ich eine Funktion wie folgt: %Vor% Obwohl die Standardbeschriftung niemals ausgeführt werden sollte, möchte ich die möglichen Fehler berücksichtigen, die auftreten können, wenn e...
28.04.2012, 02:18
1
Antwort

Wie kann ich bei der Verwendung von NUnit Assert in einer Schleife mehr Informationen in einer Fehlermeldung anzeigen?

Betrachten Sie den folgenden Code: %Vor% Wenn eine der Behauptungen fehlschlägt, erhalte ich eine sehr wenig hilfreiche Fehlermeldung wie die folgende: %Vor% Die Frage ist also, wie kann ich NUnit dazu bringen, nützlichere Informationen...
14.06.2010, 16:02