2016-01-26 17 views
22

Sto provando a scrivere un test unitario per un operatore superiore a quello sottoposto a overflow utilizzando Fluent Assertions in C#. Si suppone che l'operatore maggiore di questo classe lanci un'eccezione se uno degli oggetti è nullo.Come usare Fluent Assertions per testare l'eccezione nei test di disuguaglianza?

In genere, quando si utilizzano le asserzioni fluenti, utilizzerei un'espressione lambda per inserire il metodo in un'azione. Vorrei quindi eseguire l'azione e utilizzare action.ShouldThrow<Exception>. Tuttavia, non riesco a capire come mettere un operatore in un'espressione lambda.

Preferisco non utilizzare lo Assert.Throws() di NUnit, il Throws Vincolo o l'attributo [ExpectedException] per motivi di coerenza.

risposta

33

Si può provare questo approccio.

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

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

    comparison.ShouldThrow<Exception>(); 
} 

Non sembra abbastanza ordinato. Ma funziona.

o in due lineette

Func<bool> compare =() => lhs > rhs; 
Action act =() => compare();