2017-12-05 1 views
1

Ich bin stecken auf eine Funktion zu finden, die NUnit bietet, die ich fast sicher, dass ich es sah, und ich dachte, ich werde es verwenden, aber leider tat ich nicht stecke es irgendwo fest.Zeige den tatsächlichen Wert von komplexen Typ Parameter mit NUnit in den Berichten

Wir haben unsere Tests schreiben, wie so:

[Test] 
public void Post_StakeToDifferetnSelectionsViaBetsBetIdEndpoint_ReturnsCorrectData(
     [ValueSource(typeof(JsonContextCache), nameof(JsonContextCache.RandomThreeUniqueSelecionIds))] string[] selectionIds, 
     [ValueSource(typeof(TestData), nameof(TestData.OddStyles))] OddStyle oddStyle, 
     [Values(true, false)] bool logged) 

Problem bei diesem Ansatz ist, dass, wenn wir ValueSource oder TestCaseSource Attribute mit komplexen Typen (wie string[], benutzerdefinierte Typen) Ergebnisse in unseren CI-Umgebungen von NUnit liefern sind etwa so:

Post_StakeToDifferetnSelectionsViaBetsBetIdEndpoint_ReturnsCorrectData(System.String[],European,True) 

Was ich will, ist, anstelle dieser System.String[] die Array-Werte zu zeigen, aber ich weiß nicht, wie kann ich machen Nunit dass für mich tun.

+0

Zeigen Sie Ihren Code für 'JsonContextCache.RandomThreeUniqueSelecionIds'. Dort sollten Sie ein Array von Strings bereitstellen, auf die Sie dann in Ihrer Testmethode zugreifen können. Wenn Sie eine einzelne ID wünschen, geben Sie eine einzelne Zeichenfolge anstelle eines Arrays an. – HimBromBeere

+0

Ich möchte nicht einzelne Zeichenfolge, ich möchte es so wie es ist, aber zeigen Sie den tatsächlichen Wert des Parameters anstelle des Typs. – kuskmen

+0

Nun, bietet ein * Array von String * einen * einzigen * Test oder tatsächlich eine * Reihe von Testfällen *? Möchten Sie, dass die Testmethode einmal oder einmal pro Element in Ihrem Array ausgeführt wird? – HimBromBeere

Antwort

2

Kurze Antwort:

Es ist nicht möglich, in Ihrer Situation, da Sie [TestCaseSource] verwenden, die es völlig bis zu NUnit verlässt die Testfälle zu montieren und sie nennen. Es gibt Workarounds, die aber eher unpraktisch sind.

Längere Antwort von https bearbeitet: github.com/nunit/docs/issues/244:

können Sie die Benennung von einzelnen Testfällen unter bestimmten Umständen in NUnit ändern: 1. Wenn die Verwendung von [TestCase] Attribut, indem Sie die SetName Eigenschaft angeben. 2. Bei Verwendung des Attributs [TestCaseSource], vorausgesetzt, dass die Argumente durch Verwendung von TestCaseData Instanzen angegeben werden. Die zu verwendende Eigenschaft ist wiederum SetName.

Zwei Nachteile zu den oben genannten: 1. Sie müssen es einen Test auf einmal tun. 2. Es ist nicht verfügbar, wenn Argumente mit [Values] oder [ValueSource] angegeben werden.

Die allgemeine Lösung, die NUnit in der Vergangenheit immer empfohlen hat, ist das Überschreiben von ToString in den Typen, die Sie als Argumente verwenden. Offensichtlich, wenn der Typ string[] ist, ist das für Sie als Option nicht verfügbar.

Leider gibt es keine gute Alternative für Ihren Fall, es sei denn, wir implementieren eine Lösung für das oben genannte Problem. Abhilfen zu berücksichtigen:

  1. Verwenden [TestCase] oder [TestCaseSource], alle selbst die Kombinationen formulierend, und geben Sie SetName auf jeden Fall.

  2. Wrap string[] mit einem eigenen Typ zu Testzwecken überschreiben ToString(), um den Array-Inhalt anzuzeigen.

Verwandte Themen