2017-06-26 13 views
-1

Ich muss einen Komponententest für eine neue Methode erstellen, die ich erstellt habe. Im Moment habe ich ein Problem, das mein tatsächliches Ergebnis mit meinem gewünschten Ergebnis vergleicht.Vergleichen mit DataTable-Zeilenwert

Verfahren in Frage:

public DataTable UniformDateFormat(DataTable durations, string targetColumn) 
{ 

    foreach (DataRow row in durations.Rows) 
    { 
     if (row[targetColumn].ToString().Length > 0) 
      { 
       DateTime conv = DateTime.Parse(row[targetColumn].ToString()); 
      } 
    } 

    return durations; 
} 

Diese Methode einfach für eine bestimmte Spalte überprüft wird, und wandelt dann die Valuta innerhalb jeder Zelle der Spalte zu finden (es ist ein Excel-Blatt) und wandelt sie in etwas Uniformierter.

Mein Test-Code für es ist dies:

DataTable table = new DataTable(); 
table.Columns.Add("Reporting Date"); 

table.Rows.Add("12-06-2007"); 
test = new DurationData(excelConfig); 

foreach (DataRow row in table.Rows) 
{ 
    result = row["Reporting Date"].ToString(); 

} 
// the test I want to run 
if (table.Columns.Contains("Reporting Date")) 
{ 
    result = test.UniformDateFormat(table, "Reporting Date").ToString(); 
    Assert.AreSame("2007-06-12", result); 
    Console.Write("here"); 
} 

Wenn ich führen Sie diesen Test-Code ich folgende Ausgabe:

Nachricht: Erwartet: gleiche wie "2007-06-12" Aber war: string.Empty

Was muss ich ändern, um meinen Test richtig auszuführen?

+0

Die 'UniformDateFormat'-Methode ist seltsam, sie versucht im Grunde nichts anderes, als Strings in Datumswerte zu konvertieren, ohne diesen Datumsangaben eine Variable zuzuordnen. Abgesehen davon gibt 'UniformDateFormat' eine' DataTable' zurück und 'ToString' gibt nur die Eigenschaft' TableName' der Tabelle zurück (+ 'DisplayExpressio'). Natürlich ist das kein Date. –

+0

Sind Sie sicher, dass die Methode 'UniformDateFormat' den gleichen Code wie Sie geschrieben hat und Teil eines größeren Frameworks ist? Die Methode macht nichts Sinnvolles und gibt dieselbe Datentabelle zurück, die an sie übergeben wird. –

Antwort

0

Durch den Aufruf ...

result = test.UniformDateFormat(table, "Reporting Date").ToString(); 
Assert.AreSame("2007-06-12", result); 

... nehmen Sie ein komplettes Datatable und .ToString() auf es nennen. Dies gibt einfach den Tabellenname (Eigenschaft .TableName) zurück, der in Ihrem Beispiel nicht festgelegt ist. Sie vergleichen also eine Datumszeichenfolge mit einer leeren Zeichenfolge - genau das sagt die Fehlermeldung.

Soweit ich sehen kann, formatiert diese Methode UniformDateFormat nur die Datumswerte. Sie sollten die Rückgabewerte nicht verwenden, sondern die Datenzeilen durchlaufen und die Werte in der Spalte "Reporting Date" mit Ihrer Datumszeichenfolge vergleichen.

Ich sehe, du hast so etwas probiert, aber deine erste Schleife endet zu früh. Prüfen Sie es wie folgt aus:

// format the dates BEFORE the loop 
test.UniformDateFormat(table, "Reporting Date"); 

foreach (DataRow row in table.Rows) 
{ 
    // assert the date values for each row 
    string dateValue = row["Reporting Date"].ToString(); 
    Assert.AreSame("2007-06-12", dateValue); 
} 

Beachten Sie jedoch, dass das Verfahren UniformDateFormat wird nichts auf die Datatable tun, weil es nur Datumswerte konvertiert, aber sie nicht zurück zu schreiben.

+0

Die neue Methode ist Teil einer größeren Rahmenarbeit, die ich nicht ändern kann. Wie kann ich meine Ergebniszeichenfolge als den Wert der einzigen Zeile in der Datentabelle erhalten? Es ist dieser Anruf, den ich versuche zu machen – N0xus