2016-01-26 30 views
22

Próbuję napisać test jednostkowy dla operatora większego niż przesłonięty przy użyciu Fluent Assataions w języku C#. Większy operator niż w tej klasie powinien zgłaszać wyjątek, jeśli którykolwiek z obiektów ma wartość NULL.Jak używać płynnych asercji do testowania wyjątków w testach nierówności?

Zwykle podczas używania Fluent Assataions użyłbym wyrażenia lambda, aby umieścić tę metodę w akcji. Następnie uruchomiłbym akcję i użyłbym action.ShouldThrow<Exception>. Jednak nie mogę wymyślić, jak umieścić operatora w wyrażeniu lambda.

Wolałbym nie używać atrybutu NUnit: Assert.Throws(), Throws lub [ExpectedException] dla spójności konsystencji.

Odpowiedz

33

Możesz spróbować tego podejścia.

[Test] 
public void GreaterThan_NullAsRhs_ThrowsException() 
{ 
    var lhs = new ClassWithOverriddenOperator(); 
    var rhs = (ClassWithOverriddenOperator) null; 

    Action comparison =() => { var res = lhs > rhs; }; 

    comparison.ShouldThrow<Exception>(); 
} 

Nie wygląda wystarczająco schludnie. Ale działa.

lub w dwóch liniach

Func<bool> compare =() => lhs > rhs; 
Action act =() => compare(); 
Powiązane problemy