Unit Tests - Richtlinien

  • C#
  • .NET (FX) 4.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Unit Tests - Richtlinien

    Gibt es bei Unit Tests Richtlinien an die ich mich halten muss? Müssen die Methoden TestMethod1() eine spezielle Benennung haben? - Wie muss der Dateiname lauten?

    Mein aktueller Unit Test sieht so aus:

    C#-Quellcode

    1. ​using System;
    2. using System.IO;
    3. using System.Text;
    4. using Microsoft.VisualStudio.TestTools.UnitTesting;
    5. using Sharpex2D.Framework.Content.Storage;
    6. namespace Sharpex2D.Test
    7. {
    8. [TestClass]
    9. public class UnitTest2
    10. {
    11. [TestMethod]
    12. public void TestMethod1()
    13. {
    14. var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Testfile.cs");
    15. var tempFile = TemporaryFile.Open(path);
    16. var buffer = Encoding.UTF8.GetBytes("TemporaryFile Test");
    17. tempFile.Stream.Write(buffer, 0,
    18. buffer.Length);
    19. tempFile.Stream.Seek(0, SeekOrigin.Begin);
    20. var readBuffer = new byte[buffer.Length];
    21. tempFile.Stream.Read(readBuffer, 0, buffer.Length);
    22. Assert.AreEqual("TemporaryFile Test", Encoding.UTF8.GetString(readBuffer));
    23. tempFile.Dispose();
    24. Assert.AreEqual(false, File.Exists(path));
    25. }
    26. }
    27. }


    Dateiname: TemporaryFile.Test.cs
    Ich nenne die Methoden in meinen Unittests immer Can + Aktion, also zum Beispiel CanReadFile oder sowas.
    Wirklich Richtlinien gibt es da aber afaik nicht.
    Den Test selber würde ich dann zum Beispiel FileReadTest nennen oder sowas.
    Die Datei selber dann eben so nennen wie den Test.

    Was man halt beachten muss, ist ClassCleanUp zu implementieren, wenn man was säubern will und eben ob es manchmal für die ganze Klasse oder nur einzelne Methoden etwas initialisieren soll, aber das weißt Du denke ich ;).
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    ThuCommix schrieb:

    Benennung
    Benenne die Testmethode so wie die Methode, die Du testest mit dem Suffix oder Präfix Test ==> alphabetische Sortierung.
    Gruppiere die Tests so, dass z.B. alle Tests zu einer Klasse in einer separaten Teszklasse stehen.
    Falls Du mit datengetriebenen Tests arbeitest, nimm CSV-Quellen, die lassen sich am schnellsten editieren.
    ==> Pro Datenzeile wird der Test je einmal mit den entsprechenden Daten aufgerufen, bei Abbruch geht es mit der nächsten Zeile weiter.
    Benenne die Datenquelle wie den Test, der sie aufruft.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    ThuCommix schrieb:

    CSV Quellen
    ???
    Du kannst mit dem Studio direkt Testprojekte, Testklassen und Tests erstellen, das Studio gibt da Defaultnamen vor.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    ThuCommix schrieb:

    CSV
    Sorry, da saß gerade einer bei mir auf der Leitung. :S
    Klar doch, kannst Du alles im Studio machen.
    So ist dann der Aufruf:

    VB.NET-Quellcode

    1. /// <summary>
    2. /// a test for access a csv file
    3. /// </summary>
    4. [DataSource(
    5. "Microsoft.VisualStudio.TestTools.DataSource.CSV",
    6. "Data\\CsvValues.csv",
    7. "CsvValues#csv",
    8. DataAccessMethod.Sequential)]
    9. [TestMethod]
    10. public void TestViaCsv()
    11. {
    12. int x1 = Convert.ToInt32(this.TestContext.DataRow["Summand1"]);
    13. int x2 = Convert.ToInt32(this.TestContext.DataRow["Summand2"]);
    14. int sum = Convert.ToInt32(this.TestContext.DataRow["Summe"]);
    15. Assert.AreEqual(x1 + x2, sum, string.Format("{0} + {1} = {2}", x1, x2, sum));
    16. }
    Dateien
    • CsvValues.zip

      (158 Byte, 80 mal heruntergeladen, zuletzt: )
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!