Dela via


MSTest-försäkran

Använd klasserna Assert i Microsoft.VisualStudio.TestTools.UnitTesting namnområdet för att verifiera specifika funktioner. En testmetod använder koden i ditt program men rapporterar endast korrekthet när du inkluderar Assert instruktioner.

Översikt

MSTest tillhandahåller tre assertklasser:

Class Avsikt
Assert Allmänna försäkran för värden, typer och undantag.
StringAssert Strängspecifika uttryck för mönster, delsträngar och jämförelser.
CollectionAssert Säkerställanden för att jämföra och verifiera samlingar.

Tips/Råd

När det finns funktioner i både Assert ochStringAssert/CollectionAssert , föredrar du Assert klassen. Klassen Assert ger bättre identifiering och är det rekommenderade valet för ny kod. StringAssert och CollectionAssert underhålls för bakåtkompatibilitet.

Alla kontrollmetoder accepterar en valfri meddelandeparameter som visas när försäkran misslyckas, vilket hjälper dig att identifiera orsaken:

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

Klassen Assert

Använd klassen Assert för att kontrollera att koden som testas fungerar som förväntat.

Vanliga assertionsmetoder

[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());
}

Tillgängliga API:er

Klassen StringAssert

StringAssert Använd klassen för att jämföra och undersöka strängar.

Anmärkning

Alla StringAssert metoder har motsvarigheter i Assert klassen. Föredra Assert metoderna för bättre upptäckbarhet. Klassen StringAssert underhålls för bakåtkompatibilitet.

Tillgängliga API:er är:

Klassen CollectionAssert

CollectionAssert Använd klassen för att jämföra samlingar av objekt eller för att verifiera tillståndet för en samling.

Anmärkning

När det finns en motsvarande metod i Assert klassen (till exempel Assert.Contains, Assert.DoesNotContain) föredrar du att använda Assert för bättre identifiering. Klassen CollectionAssert underhålls främst för bakåtkompatibilitet.

Tillgängliga API:er är:

Metodtips

  1. Använd specifika försäkran: Föredra AreEqual framför IsTrue(a == b) för bättre felmeddelanden.

  2. Inkludera beskrivande meddelanden: Hjälp till att snabbt identifiera fel med tydliga försäkran.

  3. Testa en sak i taget: Varje testmetod bör verifiera ett enda beteende.

  4. Använda Throws/ThrowsExactly för undantag: I MSTest v3.8+ föredrar du Assert.Throws, Assert.ThrowsExactlyoch deras asynkrona motsvarigheter (ThrowsAsync, ThrowsExactlyAsync) framför ExpectedException attributet.

  5. Föredra Assert framför StringAssert/CollectionAssert: När det finns funktioner i båda klasserna använder du Assert klassen för bättre identifiering och konsekvens.

Följande analysverktyg hjälper till att säkerställa korrekt användning av försäkran:

  • MSTEST0006 – Undvik ExpectedException attribut, använd Assert.Throws metoder i stället.
  • MSTEST0017 – Argument för påståenden ska skickas i rätt ordning.
  • MSTEST0023 – Negera inte booleska påståenden.
  • MSTEST0025 – Föredrar Assert.Fail framför alltid falska villkor.
  • MSTEST0026 – Argument för försäkran bör undvika villkorlig åtkomst.
  • MSTEST0032 – Granska alltid sanna assert-villkor.
  • MSTEST0037 – Använd rätt kontrollmetoder.
  • MSTEST0038 – Undvik Assert.AreSame med värdetyper.
  • MSTEST0039 – Använd nyare Assert.Throws metoder.
  • MSTEST0040 – Undvik att använda assertioner i asynkron kontext av void.
  • MSTEST0046 – Använd Assert i stället för StringAssert.
  • - Assert.Throws MSTEST0051 ska innehålla en enda instruktion.
  • MSTEST0053 – Undvik Assert formatparametrar.
  • MSTEST0058 – Undvik asserter i fångstblock.

Se även