Edit 2 xUnit 2 alla fine ha finito per spostare le asserzioni in un assembly separato del tutto. Vi sono sia pacchetti compilati che di sola origine di questo su NuGet e la classe Assert
è parziale, quindi utilizzando la sola versione di origine del pacchetto, Assert
diventa molto facilmente estendibile (in C#, cioè).
Modifica Per ulteriori completezza: xUnità 2 rimuove questo punto di estensione e consiglia di utilizzare i metodi di estensione sulla falsariga delle librerie di asserzione "fluente".
Per completezza, ecco una descrizione del modo "ufficiale" di estendere Assert
(che sorprendentemente non è stato menzionato a tutti, nonostante il fatto che Brad Wilson anche aderito la discussione).
Dalla versione 1.5 (secondo il blog di Brad), xUnit.Extensions ha il supporto esplicito per questo tramite le classi Assertions
e TestClass
. Funziona così:
TestClass
ha una proprietà chiamata Assert
che è di tipo Assertions
che trasmette tutti i metodi su Xunit.Assert
. Perché TestClass.Assert
è un esempio, è possibile aggiungere metodi ad esso attraverso metodi di estensione su Assertions
:
public static class AssertionsExtensions
{
public static void DeepEquals(this Assertions assertions, XNode expected, XNode actual)
{
assertions.True(XNode.DeepEquals(expected, actual)); // You can also use Assert.True here, there's effectively no difference.
}
}
Ora è necessario avere la classe di test derivare da Xunit.Extensions.TestClass
(confusamente, c'è anche Xunit.TestClass
, che non è quello che si vuole) e la proprietà Assert
"ombreggia" il tipo Xunit.Assert
se non si qualifica esplicitamente il nome.
Nella tua classe di test che deriva da TestClass
, è ora possibile utilizzare
Assert.DeepEquals(expectedXml, actualXml);
L'unica vera differenza da un built-in xUnit affermazione (a parte il fatto che la colorazione della sintassi per Assert
è quella di un identificatore , non un tipo) è che quando fallisce, si ottiene semplicemente un, non uno specifico DeepEqualsException
che potrebbe ipoteticamente dirti dove il confronto non è riuscito a. Ma ovviamente puoi costruirlo anche nello stesso modo.
Grazie, che spiega il motivo per cui non ho potuto ottenere l'asserzione di estendere come avrei voluto. La tua soluzione è praticamente ciò che ho finito, ma ho chiamato il mio 'SeleniumAssert.ElementPresent (...);' – Neil
Per xUnit 2, controlla gli esempi come https://github.com/xunit/samples.xunit /blob/master/AssertExtensions/StringAssertionExtensions.cs – Jedidja