MSTest-állítások

Az Microsoft.VisualStudio.TestTools.UnitTesting névtér Assert osztályait használja az egyes funkciók ellenőrzésére. Egy tesztmetódus lefuttatja a kódot az alkalmazásban, de csak akkor jelez helyességet, ha a szükséges utasításokat is tartalmazza Assert.

Áttekintés

Az MSTest három állítási osztályt biztosít:

Class Cél
Assert Általános célú állítások értékekhez, típusokhoz és kivételekhez.
StringAssert Sztringspecifikus állítások mintákhoz, részsztringekhez és összehasonlításokhoz.
CollectionAssert Gyűjtemény-állítások a gyűjtemények összehasonlításához és érvényesítéséhez.

Jótanács

Ha a funkció létezik mind a Assert-ban, mind a StringAssert/CollectionAssert-ban, akkor az Assert osztályt kell előnyben részesíteni. Az Assert osztály jobb felderíthetőséget biztosít, és az új kódhoz ajánlott választás. StringAssert és CollectionAssert a visszamenőleges kompatibilitás érdekében megmaradnak.

Minden helyességi metódus elfogad egy opcionális üzenetparamétert, amely az állítás meghiúsulásakor jelenik meg, és segít azonosítani az okot:

Assert.AreEqual(expected, actual, "Values should match after processing");

Az Assert osztály

A Assert osztály használatával ellenőrizze, hogy a vizsgált kód a várt módon működik-e.

Gyakori állítási módszerek

[TestMethod]
public async Task AssertExamples()
{
    // Equality
    Assert.AreEqual(5, calculator.Add(2, 3));
    Assert.AreNotEqual(0, result);

    // Reference equality
    Assert.AreSame(expected, actual);
    Assert.AreNotSame(obj1, obj2);

    // Boolean conditions
    Assert.IsTrue(result > 0);
    Assert.IsFalse(string.IsNullOrEmpty(name));

    // Null checks
    Assert.IsNull(optionalValue);
    Assert.IsNotNull(requiredValue);

    // Type checks
    Assert.IsInstanceOfType<IDisposable>(obj);
    Assert.IsNotInstanceOfType<string>(obj);

    // Exception testing (MSTest v3.8+)
    Assert.ThrowsExactly<ArgumentNullException>(() => service.Process(null!));
    await Assert.ThrowsExactlyAsync<InvalidOperationException>(
        async () => await service.ProcessAsync());
}

Elérhető API-k

Az StringAssert osztály

A StringAssert osztály segítségével összehasonlíthatja és megvizsgálhatja a sztringeket.

Megjegyzés:

A StringAssert osztályban minden Assert metódus rendelkezik megfelelővel. A jobb felderíthetőség érdekében előnyben részesítse a Assert módszereket. Az StringAssert osztály megmarad a visszamenőleges kompatibilitás érdekében.

Az elérhető API-k a következők:

Az CollectionAssert osztály

Az osztály használatával CollectionAssert összehasonlíthatja az objektumgyűjteményeket, vagy ellenőrizheti a gyűjtemény állapotát.

Megjegyzés:

Ha az Assert osztályban létezik egy egyenértékű metódus (például Assert.Contains, Assert.DoesNotContain), akkor a jobb felderíthetőség érdekében inkább használja a Assert metódust. Az CollectionAssert osztály elsősorban a visszamenőleges kompatibilitás érdekében van fenntartva.

Az elérhető API-k a következők:

Ajánlott eljárások

  1. Konkrét állítások használata: Előnyben részesítheti AreEqualIsTrue(a == b) a jobb hibaüzeneteket.

  2. Leíró üzenetek belefoglalása: Segítség a hibák gyors azonosításához egyértelmű helyességi üzenetekkel.

  3. Egyszerre egy dolog tesztelése: Minden tesztmetódusnak egyetlen viselkedést kell ellenőriznie.

  4. Használja Throws/ThrowsExactly kivételek esetén: Az MSTest 3.8+-os verzióban előnyben részesítse Assert.Throwsa , Assert.ThrowsExactlyés az aszinkron megfelelőiket (ThrowsAsync, ThrowsExactlyAsync) az ExpectedException attribútummal szemben.

  5. Előnyben részesítse a Assert-t a StringAssert/CollectionAssert-vel szemben: Ha a funkciók mindkét osztályban léteznek, használja a Assert osztályt a jobb felderíthetőség és konzisztencia érdekében.

A következő elemzők biztosítják az állítások megfelelő használatát:

  • MSTEST0006 – Kerülje az ExpectedException attribútumot, használjon Assert.Throws inkább metódusokat.
  • MSTEST0017 – Az argumentumokat a megfelelő sorrendben kell átadni.
  • MSTEST0023 – Ne tagadja meg a logikai feltételeket.
  • MSTEST0025 - Előnyben részesítse a Assert.Fail-t a mindig hamis feltételek helyett.
  • MSTEST0026 – Az állítási argumentumoknak kerülnie kell a feltételes hozzáférést.
  • MSTEST0032 – Mindig igaz állítási feltételek áttekintése.
  • MSTEST0037 – Használjon megfelelő érvényesítési módszereket.
  • MSTEST0038 – Kerülje Assert.AreSame az értéktípusokat.
  • MSTEST0039 – Újabb metódusok használata Assert.Throws .
  • MSTEST0040 – Az aszinkron érvénytelen környezetben ne használjon érvényességeket.
  • MSTEST0046 – Használat Assert helyett StringAssert.
  • - Assert.Throws MSTEST0051 egyetlen utasítást kell tartalmaznia.
  • MSTEST0053 – Kerülje a Assert formázási paramétereket.
  • MSTEST0058 – Kerülje az állításokat a fogási blokkokban.

Lásd még