NUnit
Originalförfattare | Charlie Poole, James Newkirk, Alexei Vorontsov, Michael Two, Philip Craig, Rob Prouse, Simone Busoli, Neil Colvin |
---|---|
Utvecklare |
NUnit-projektet, .NET Foundation |
Stabil frisättning | 3.13.2 / 27 april 2021
|
Förvar | |
Skrivet i | C# |
Operativ system | .NET Framework , Mono |
Typ | Enhetstestverktyg _ |
Licens | MIT-licens för 3.0, BSD-stil (modifierad zlib-licens ) för 2.x |
Hemsida |
NUnit är ett ramverk för enhetstestning med öppen källkod för .NET Framework och Mono . Det tjänar samma syfte som JUnit gör i Java- världen och är ett av många program i xUnit -familjen. [ citat behövs ]
Funktioner
- Tester kan köras från en konsollöpare, i Visual Studio via en testadapter eller via tredje parts löpare.
- Tester kan köras parallellt.
- Starkt stöd för datadrivna tester.
- Stöder flera plattformar inklusive .NET Core , Xamarin Mobile , Compact Framework och Silverlight .
- Varje testfall kan läggas till i en eller flera kategorier för att möjliggöra selektiv körning.
NUnit tillhandahåller en konsollöpare (nunit3-console.exe), som används för batchkörning av tester. Konsollöparen fungerar genom NUnit Test Engine, som ger den möjlighet att ladda, utforska och utföra tester. När tester ska köras i en separat process använder motorn sig av programmet nunit-agent för att köra dem. [ citat behövs ]
NUnitLite löpare kan användas i situationer där en enklare löpare är mer lämplig. Det låter utvecklare skapa självkörande tester. [ citat behövs ]
Påståenden
NUnit tillhandahåller en rik uppsättning påståenden som statiska metoder för Assert
-klassen. Om ett påstående misslyckas återkommer inte metodanropet och ett fel rapporteras. Om ett test innehåller flera påståenden kommer alla som följer efter det som misslyckades inte att köras. Av denna anledning är det vanligtvis bäst att försöka få ett påstående per test. [ citat behövs ]
Nunit 3.x stöder flera påståenden.
[Test] public void ComplexNumberTest () { ComplexNumber result = SomeCalculation (); Påstå . Multiple (() => { Assert . AreEqual ( 5.2 , resultat . RealPart , "Real part" ); Assert . AreEqual ( 3.9 , resultat . ImaginaryPart , "Imaginary del" ); }); }
Klassisk
användes en separat metod av Assert -klassen för varje olika påstående.
Det fortsätter att stödjas i NUnit, eftersom många föredrar det. [ citat behövs ]
Varje påståendemetod kan anropas utan meddelande, med ett enkelt textmeddelande eller med ett meddelande och argument. I det sista fallet formateras meddelandet med den angivna texten och argumenten. [ citat behövs ]
// Jämlikhet hävdar . AreEqual ( objekt förväntat , objekt faktiskt ); Påstå . AreEqual ( objekt förväntat , objekt faktiskt , strängmeddelande , params objekt [] parms ) ; Påstå . AreNotEqual ( objekt förväntat , objekt faktiskt ); Påstå . AreNotEqual ( objekt förväntat , objekt faktiskt , strängmeddelande , params objekt [] parms ) ; // Identitet hävdar . AreSame ( objekt förväntat , objekt faktiskt ); Påstå . AreSame ( objekt förväntat , objekt faktiskt , strängmeddelande , params objekt [] parms ) ; Påstå . AreNotSame ( objekt förväntat , objekt faktiskt ); Påstå . AreNotSame ( objekt förväntat , objekt faktiskt , strängmeddelande , params objekt [] parms ) ; // Condition asserts // (För enkelhetens skull utelämnas metoder med meddelandesignaturer.) Assert . IsTrue ( bool condition ); Påstå . IsFalse ( bool condition ); Påstå . IsNull ( objekt anObject ); Påstå . IsNotNull ( objekt anObject ); Påstå . IsNaN ( dubbel aDouble ); Påstå . IsEmpty ( sträng aString ); Påstå . IsNotEmpty ( sträng aString ); Påstå . IsEmpty ( ICollection collection ); Påstå . IsNotEmpty ( ICollection -samling );
Begränsningsbaserad
Från och med NUnit 2.4 introducerades en ny Constraint-baserad modell. Detta tillvägagångssätt använder en enda metod av Assert
-klassen för alla påståenden, och passerar ett Constraint-
objekt som anger testet som ska utföras. Denna begränsningsbaserade modell används nu internt av NUnit för alla påståenden. Metoderna för det klassiska tillvägagångssättet har återimplementerats ovanpå denna nya modell. [ citat behövs ]
Exempel
Exempel på en NUnit testfixtur : [ citat behövs ]
använder NUnit.Framework ; [TestFixture] public class ExampleTestOfNUnit { [Test] public void TestMultiplication () { Assert . AreEqual ( 4 , 2 * 2 , "Multiplikation" ) ; // På motsvarande sätt, eftersom version 2.4 NUnit erbjuder en ny och // mer intuitiv påståendesyntax baserad på begränsningsobjekt // [http://www.nunit.org/index.php?p=constraintModel&r=2.4.7]: Assert . Det ( 2 * 2 , är . EqualTo ( 4 ), "Multiplikationsbegränsningsbaserad" ) ; } } // Följande exempel visar olika sätt att skriva samma undantagstest. [TestFixture] public class AssertThrowsTests { [Test] public void Tests () { // .NET 1.x Assert . Throws ( typeof ( ArgumentException ), ny TestDelegate ( MethodThatThrows ) ); // .NET 2.0 Säkerställ . Throws < ArgumentException >( MethodThatThrows ) ; Påstå . Kastar < ArgumentException >( delegate { throw new ArgumentException (); }); // Använder C# 3.0 Assert . Kastar < ArgumentException >( () => { throw new ArgumentException (); }); } void MethodThatThrows () { throw new ArgumentException (); } } // Det här exemplet visar användningen av returvärdet för att utföra ytterligare verifiering av undantaget. [TestFixture] public class UsingReturnValue { [Test] public void TestException () { MyException ex = Assert . Kastar < MyException >( delegate { throw new MyException ( "meddelande" , 42 ) ; }); Påstå . Det ( ex . Message , Is . EqualTo ( "meddelande" ) ); Påstå . Det ( ex . MyParam , Is . EqualTo ( 42 )); } } // Det här exemplet gör samma sak med hjälp av överbelastningen som innehåller en begränsning. [TestFixture] public class UsingConstraint { [Test] public void TestException () { Assert . Kastar ( Är . Typ av < MyException >() . And . Message . EqualTo ( "meddelande" ) . And . Property ( "MyParam" ). EqualTo ( 42 ), delegera { throw new MyException ( "meddelande" , 42 ); } ); } }
Ramverket NUnit upptäcker metoden ExampleTestOfNUnit.TestMultiplication()
automatiskt genom reflektion . [ citat behövs ]
Tillägg
FireBenchmarks är ett tillägg som kan registrera exekveringstid för enhetstester och generera XML , CSV , XHTML prestandarapporter med diagram och historikspårning. Dess huvudsakliga syfte är att göra det möjligt för en utvecklare eller ett team som arbetar med en agil metodik för att integrera prestandamått och analys i enhetstestmiljön , att enkelt kontrollera och övervaka utvecklingen av ett mjukvarusystem när det gäller algoritmisk komplexitet och systemresursbelastning. [ citat behövs ]
NUnit.Forms är en expansion till NUnits kärna och är också öppen källkod. Den tittar specifikt på att utöka NUnit för att kunna hantera testning av användargränssnittselement i Windows Forms . Från och med januari 2013 är Nunit.Forms i Alpha-utgåvan, och inga versioner har släppts sedan maj 2006. [ citat behövs ]
NUnit.ASP är en utvidgning av kärnan i NUnit-ramverket och är också öppen källkod. Den tittar specifikt på att utöka NUnit för att kunna hantera testning av användargränssnittselement i ASP.Net. [ citat behövs ]
Se även
- Testa automatisering
- Lista över ramverk för enhetstestning för .NET-programmeringsspråk (inkluderar kolumn som anger vilka som är baserade på xUnit)
- XUnit.net
- JUnit
Bibliografi
- Hunt, Andrew; Thomas, David (2007). Pragmatisk enhetstestning i C# med NUnit, 2nd Ed. The Pragmatic Bookshelf (Raleigh), 2007. ISBN 0-9776166-7-3 .
- Newkirk, Jim; Vorontsov, Alexei (2004). Testdriven utveckling i Microsoft .NET. Microsoft Press (Redmond), 2004. ISBN 0-7356-1948-4 .
- Hamilton, Bill (2004). NUnit Pocket Reference . O'Reilly (Cambridge), 2004. ISBN 0-596-00739-6 .
externa länkar
- Officiell hemsida
- GitHub webbplats
- Launchpad-webbplats (underhålls inte längre)
- Testdriven utveckling med NUnit & Testdriven.NET videodemonstration
- NUnit.Forms hemsida
- NUnitAsps hemsida
- Artikel Förbättra applikationskvaliteten med hjälp av testdriven utveckling ger en introduktion till TDD med konkreta exempel med hjälp av Nunit
- Verktyg med öppen källkod, som kan utföra nunit-tester parallellt
- Charlie Poole , medutvecklare
- Rob Prouse , medutvecklare
- Simone Busoli , medutvecklare