2015-11-24 13 views
31

Jestem nowy na użyciu Testing Tools na Framework, więc ściągnąłem go z Nuget z pomocą ReSharper.ExpectedException w NUnit dał mi błąd

Używam tego Quick Start, aby nauczyć się korzystać z nUnit. I właśnie skopiowany kod i błąd pojawił się na tym atrybucie:

[ExpectedException(typeof(InsufficientFundsException))] //it is user defined Exception 

błędu jest:

typu lub obszaru nazwa „ExpectedException” Nie można znaleźć (czy brakuje używając dyrektywy lub odniesienia do zespołu?)

Dlaczego? A jeśli potrzebuję takiej funkcjonalności, co powinienem ją zastąpić?

+0

Jaki błąd jest wyświetlany? Czy błąd jest wyświetlany w nUnit lub IDE? – Chawin

+0

Myślę, że Twój kod zwraca wyjątek, który nie jest wyjątek InsufficientFundsException –

Odpowiedz

54

Jeśli używasz NUnit 3.0, Twój błąd jest następujący: ExpectedExceptionAttributehas been removed. Zamiast tego powinieneś użyć konstruktu takiego jak Throws Constraint.

Na przykład, poradnik jesteś połączony ma ten test:

[Test] 
[ExpectedException(typeof(InsufficientFundsException))] 
public void TransferWithInsufficientFunds() 
{ 
    Account source = new Account(); 
    source.Deposit(200m); 

    Account destination = new Account(); 
    destination.Deposit(150m); 

    source.TransferFunds(destination, 300m); 
} 

Aby to zmienić, aby pracować w NUnit 3.0, zmień go na następujące kwestie:

[Test] 
public void TransferWithInsufficientFunds() 
{ 
    Account source = new Account(); 
    source.Deposit(200m); 

    Account destination = new Account(); 
    destination.Deposit(150m); 

    Assert.That(() => source.TransferFunds(destination, 300m), 
       Throws.TypeOf<InsufficientFundsException>()); 
} 
4

Jeśli nadal chcesz używać Atrybuty, rozważ to:

[TestCase(null, typeof(ArgumentNullException))] 
[TestCase("this is invalid", typeof(ArgumentException))] 
public void SomeMethod_With_Invalid_Argument(string arg, Type expectedException) 
{ 
    Assert.Throws(expectedException,() => SomeMethod(arg)); 
} 
11

Nie jestem pewien czy to się zmieniło ostatnio, ale z NUnit 3.4.0 zapewnia Assert.Throws<T>.

[Test] 
public void TransferWithInsufficientFunds() { 
    Account source = new Account(); 
    source.Deposit(200m); 

    Account destination = new Account(); 
    destination.Deposit(150m); 

    Assert.Throws<InsufficientFundsException>(() => source.TransferFunds(destination, 300m)); 
} 
Powiązane problemy