Náhrada [ExpectedException] ve WinRT Test Library

Uncategorized

9 years ago

Při psaní unit testů pro Windows Store aplikaci jsem zapisoval test, který kontroloval, zda kód vyvolá očekávanou výjimku. Pro non-WinRT projekty je možné použít kód následujícího typu:

[TestMethod]
[ExpectedException(typeof(DivideByZeroException))]
public async Task Test()
{
  int result = ( new Calc() ).Divide( 3, 0 );
}

Z Unit Test Library pro WinRT byl ale atribut ExpectedException odebrán. Byl však nahrazen mnohem praktičtější a užitečnější metodou Assert.ThrowsException :

[TestMethod]
public async Task Test()
{
  Assert.ThrowsException<DivideByZeroException>( () => { new Calc() ).Divide( 3, 0 );} );
}

Jako typový parametr stačí uvést typ očekávané výjimky a jako argument použijeme lambda expression (či instanci Action ), která obsahuje kód, jež má výjimku vyvolat.