Iteam
GitHub

Bygg om dina NUnit-tester till Visual Studio-tester

Under tiden vi nu använt och testat Visual Studio 2010 har vi även passat på att konvertera ett testprojekt från NUnit till ett Test Project i VS 2010. Redan Visual Studio 2005 hade stöd för Test projects om än inte i lika hög grad som nu. Därför är det kanske inte konstigt att vi inte tagit steget tidigare, speciellt med tanke på hur komplett NUnit är för test/Utveckling. En av /Nyheterna i VS 2010 Test Project är möjligheten att ange kategorier för testerna.

Om man googlar lite snabbt på konvertering från NUnit till Visual Studio Test Project hittar man att gäng guider och även program som kan göra jobbet åt dig. Jag valde att göra det själv pga att det projekt som jag skulle konvertera var ganska enkelt samt att jag hade ganska liten kännedom om testerna i sig, förutom att jag gillar att veta vad som händer ”på riktigt”!

Den konverteringsprocess jag använde var väldigt enkel och skedde i ett par steg:

  1. Konvertering av projektfil
  2. Referenser till VS test-library och ändring av attribut
  3. Ett par förändringar i användningen av Assert-metoder, mer specifikt Assert.GreaterOrEqual och Assert.AreEqual för kollektioner.


1. Konvertering av projektfil

Ta bort det NUnit-projekt du ska konvertera från din solution och öppna projektfilen (.csproj) med en texteditor. Det du behöver göra är att lägga till en tagg för att markera projektfilen som Test Project så att Visual Studio känner igen den. Lägg till taggen <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> överst i <PropertyGroup>. Lägg sedan till projektet i din solution igen.

2. Referenser till VS test-library och ändring av attribut

Ta bort alla referenser till NUnit och referera istället in using Microsoft.VisualStudio.TestTools.UnitTesting;

Ersätt NUnit-attribut med motsvarande Test Project-attribut:

[TestFixture] med [TestClass]
[Test] med [TestProject]
[SetUp] med [TestInitialize]
[TearDown] med [TestCleanup]
[Category] med [TestCategory] nytt i Visual Studio 2010!

Det finns naturligtvis ett flertal attribut till som du kan behöva byta ut, men de här borde vara de vanligaste.

3. Kodändringar

De flesta av våra test gick sedan att köra rakt av men jag stötte på två problem, nämligen Assert.GreaterOrEqual och Assert.AreEqual för kollektioner.

I VS Test Project verkar det inte finnas någon direkt motsvarighet till Assert.GreaterOrEqual så de testerna fick jag helt enkelt skriva om men det kändes faktiskt inte som en en förlust att prata om.

När det gäller Assert.AreEqual så ska ett varningens finger lyftas eftersom den skiljer sig åt i utförande men på grund av att metoden tar två likadana parametrar så kommer du inte att få ett kompileringsfel. I NUnit så gör den helt enkelt en jämförelse av varje objekt i kollektionen men det som händer i VS Test Project är att den bara göra en collection1.Equals(collection2), alltså aldrig en jämförelse av de object som finns i kollektionen. Assert.AreEqual ska i det här fallet ersättas med CollectionAssert.AreEqual som gör samma jobb i VS Test Project som NUnit gör.

Jag utgår ifrån att antalet metoder som skiljer sig åt mellan NUnit och VS Test Project är fler om du har mer komplexa tester från början!

Johanna Gustafsson
2010-03-11