= Unit Testing with NUnit = == Installation == * Using NUnit Test Runner: * Download copy from [[http://nunit.org/index.php?p=download|NUnit Downloads]]. * Install or unpack in a folder. * Using Test Explorer in VS [Optional]: * Install Visual Studio extension (Tools > Extensions and Updates): NUnit Test Adapter for Visual Studio. * Add a reference to ''NUnit.Framework.dll'' in project (or Solution) * Manually: Project > References > right-click > Add References > Find path for ''NUnit.Framework.dll'' and select it. * Automatically: Using NuGet NUnit package (see https://www.nuget.org/packages/NUnit): Select project > right-click > Manage NuGet Packages > All > Add 'NUnit'. == Usage == Create test class in project, including all necessary test cases. * See [[http://nunit.org/index.php?p=quickStart&r=2.6.4|Example]]. Create basic test class for testing unit ''TTools'' in file ''Acme.App.Localization\Tools.cs'': using System; using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; namespace Acme.App.Localization { ///============================================================================================ /// /// Class TTools /// ///============================================================================================ [TestFixture] [Category("TTools")] class ToolsTest { [SetUp] public void Init() { } [TearDown] public void CleanUp() { } [Test, Description("Check Something Exists")] public void CheckSomethingExists() { Assert.AreEqual(Something, true); } } } == Run Tests == * Using Test Explore in VS: * Test > Windows > Text Explorer. * Run tests using Unit Test Explorer > Run All. * Using NUnit Test Runner: * Run Test Runner, and create new Test project (File > New Project). * Select assembly or application containing unit tests (Project > Add Assembly). Note: These assemblies and applications must have a reference to ''NUnit.Framework.dll'' in their individual projects. == Pattern AAA == Modern tests contain three parts: [TestMethod] public void GetCount_ItemCountIsZero_NoNewMessages() { //Arrange Mailbox mailbox = new Mailbox(); //Act var result = mailbox.GetCount(0); //Assert Assert.AreEqual("No new messages.", result); } This can be summed up as a pattern: * Arrange: setup everything needed for the running the tested code. This includes any initialization of dependencies, mocks and data needed for the test to run. * Act: Invoke the code under test. * Assert: Specify the pass criteria for the test, which fails it if not met. Source: [[http://www.typemock.com/unit-test-patterns-for-net|Unit Test Patterns for .NET]]