Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

Nový Unit Test Framework pro dotnet

19.35 - 7. října 2007 | ASP.NET 2.0

Přibližně před dvěma týdny byla vypuštěna první beta verze nového testovacího frameworku xUnit.net. Spousta lidí si říká, k čemu další framework – vždyť tu máme NUnit, MbUnit, MsTest – a navíc syntakticky nekompatibilní?

xUnit.net přináší eleganci, jednoduchost a zdravý rozum. Byly zrušeny SetUpy a TearDowny a nahrazuje je IDisposable pattern a konstruktor (jednoduše elegantní), pro každý test je vždy vytvořena nová instance testovací třídy. Asserty byly revidovány a duplicitní či zbytečné byly odebrány.

Framework je navržen tak, aby byl snadno rozšiřitelný o vlastní atributy, kterými můžete specifikovat vlastní akce (např. Authetifikaci) či požadavky. Součástí frameworku není žádný mockvací nástroj. K čemu také, když už tu máme skvělé Rhino Mocks?

Nové možnosti

Běžnou praxí je na testy zakládat samostatný projekt, takže jsou testy v samostatné assembly. Pokud jste chtěli mít testy společně v jednom projektu s výkonným kódem mohli jste tak taktéž učinit. Jenže pořád je tu problém, pokud z nějakého důvodu potřebujete testovat privátní věci. Sice to je ukázka toho, že něco smrdí, ale stejně se to občas může hodit.

xUnit.net totiž ruší atribut TestFixture/TestClass a při spouštění test prohledává všechny třídy na přítomnost metod s atributem Test. To nám umožňuje mít testovací metody v jedné třídě společně s výkonným kódem a testovat tak privátní členy bez nutnosti používat reflexi. Když už se k něčemu takovému rozhodnete je dobré ještě využít partial class a testy přesunout do samostatného souboru např. Class.tests.cs

Soubor SomeClass.cs:

public partial class SomeClass {
  private bool _isDirty;
  private string _someText;

  public string SomeText {
    set {
      _isDirty = true;
      _someText = value;
    }
  }
}

Soubor SomeClass.tests.cs

public partial class SomeClass {
  [Test]
  private void SettingSomeTextMakesSomeClassDirty() {
    var testInstance = new SomeCLass();
    Assert.False(testInstance._isDirty);
    testInstance.SomeTest = "text";
    Assert.True(testInstance._isDirty);
  }
}

Také je celkem dobré nechat takové testovací metody skryté před vnějším světem, tak že jim nastavíme modifikátor viditelnosti na private. xUnit.net umí spouštět i privátní a interní metody za účelem testování (platí pro beta2 a novější).

Osobně se mi tento framework velice líbí a už jsem na něj přepsal testy pro Texy.net.

Autor: Aleš Roubíček | Přidej komentář | Delicious | Digg | FriendFeed | Facebook | Linkuj! | Jagg

Komentáře RSS

Zatím bez komentáře. Buď první!

Místo pro tvůj názor

Povinné je jméno a komentář, z e-mailu se rozpoznají Gravatary.
Komentář je formátován pomocí Texy! syntaxu.
Například: **tučný text**, *kurzíva*, "text odkazu":adresa.
Internetové adresy jsou převáděny na odkazy.
Na komentáře se můžete odkazovat pomocí [číslo komentáře].

Nový komentář