2016-04-25 17 views
0

Ich habe C# Unit Tests erstellt (mit VS Test Tools). Unter anderem gibt es Tests Ausnahmen wie die Überprüfung:Visual Studio Test Explorer führt Tests in Fremdsprache aus

Assert.AreEqual("Object reference not set to an instance of an object.", e.Message); 

Wenn ich meine Unit-Test-Datei öffnen, und klicken Sie auf „Run Tests“ im Kontextmenü, funktioniert alles einwandfrei. Wenn ich den Test-Explorer von Visual Studio verwende und dort auf "Tests ausführen" klicke, bekomme ich Ausnahmen, dass die Nachricht der Ausnahme anders ist. Eigentlich ist es dasselbe wie das, nach dem ich suche, aber in einer anderen Sprache. Die Tests, die in beiden Fällen ausgeführt werden, sind die gleichen, es gibt keine Sprachänderungen oder irgendetwas anderes, nur einfache logische Tests. Mein Betriebssystem ist in Englisch, Visual Studio. Ich habe ähnliche Tests in einer anderen Lösung und da läuft alles gut. Diese Lösung und eines der Projekte, für die ich Komponententests schreibe, wurden von einem Kollegen erstellt, der das System in dieser Fremdsprache hat. Solche Einstellungen kann ich nirgends finden. Hat jemand eine Idee, wo diese sein könnten? Wie bekomme ich die Tests immer auf Englisch?

Antwort

0

Hier ist meine Lösung für die Tests ist, sonst falls jemand es brauchen. Es ist nicht wirklich gut, wenn die Tests sprachabhängig sind, so dass ich überprüfe jetzt den Ausnahmetyp:

Assert.IsInstanceOfType(e, typeof(ArgumentNullException)); 

Allerdings würde ich noch gerne wissen, wo die Sprache aus genommen wird. Wenn ich alles auf Englisch habe, erwarte ich wirklich, dass es auf Englisch ist.

1

Verwenden Sie stattdessen HResult.

Assert.AreEqual(val, e.HResult) 

Sollte sich je nach Sprache nicht ändern. HResult ist ein codierter numerischer Wert, der einer bestimmten Ausnahme zugewiesen ist. Mit HResult wissen Sie also, welche Ausnahme ausgelöst wird.

Edit:

Oder wenn Sie wissen, was Ausnahme, die Sie erwarten, könnten Sie Ihre eigene exception- „expecter“ schreiben.

protected static void ThrowsException<T>(Action action) where T : Exception 
    { 
     var thrown = false; 
     try 
     { 
      action(); 
     } 
     catch (T) 
     { 
      thrown = true; 
     } 

     Assert.IsTrue(thrown); 
    } 

Und dann ist es wie folgt zu verwenden:

ThrowsException<IndexOutOfRangeException>(() => MyController.MyAction()); 
+0

ich wirklich nicht will, einige seltsamen Zahlen verwenden, wollte ich einfach wissen, wie die Sprache der Tests zu steuern, und wie ist es möglich, eine Fremdsprache haben wenn mein gesamtes System auf Englisch ist. Aber du hast Recht, für die Tests sollte ich etwas sprachneutrales, gutes Argument verwenden. – Antiohia

+0

Wenn Sie möchten, dass es sprachunabhängig ist, können Sie die merkwürdigen Ganzzahlen verwenden, aber sie an eine Enumeration binden. Dann sehen Sie, welche Ausnahme es im Text ist. –

0

Warum verwenden Sie nicht nur Würfe mit bestimmter Ausnahme? Die Suche nach einer String-Nachricht ist wirklich schlecht. Meiner Meinung nach ist es sogar sauberer als mit IsInstanceOfType

var testDelegate =() => MyService.Method(params); 
Assert.Throws<NullException>(testDelegate);