2016-04-07 26 views
7

Attualmente sto riscrivendo alcuni test di unità per utilizzare NUnit 3 anziché NUnit 2 e devo modificare alcuni asserzioni per gli asseriti basati su contraint. Ho il seguente afferma:Aumentare la leggibilità per affermare IsNotNullOrEmpty con asserzioni basate su vincoli

Assert.IsNullOrEmpty(result); 

che ho cambiato a:

Assert.That(result, Is.Null.Or.Empty); 

Tuttavia, io non sono del tutto soddisfatti della leggibilità quando affermando IsNotNullOrEmpty:

Assert.That(result, Is.Not.Null.And.Not.Empty); 

mio suggerimento attuale è quello di creare la seguente classe statica:

public static class Text 
{ 
    public static EmptyConstraint IsNullOrEmpty => Is.Null.Or.Empty; 

    public static EmptyConstraint IsNotNullOrEmpty => Is.Not.Null.And.Not.Empty; 
} 

Usage:

Assert.That(result, Text.IsNotNullOrEmpty); 

Questo offre una migliore leggibilità a scapito di introdurre un vincolo personalizzato. Esiste un modo standard per fare la stessa asserzione, oppure dovrei continuare a utilizzare Is.Not.Null.And.Not.Empty?

+0

Questa domanda può essere risolta in modo obiettivo. Modificato il corpo per riaffermare la domanda in termini non soggettivi; votando per riaprire. – dasblinkenlight

risposta

7

La tua affermazione per Is.Null.Or.Empty legge perfettamente senza una classe Test. Inoltre, quando questa asserzione fallisce, sai esattamente cosa è successo: hai un oggetto valido string che non è vuoto.

I problemi che vedo con la versione "DeMorganized" della sua negazione, ovvero Is.Not.Null.And.Not.Empty, sono che è troppo lungo e non viene letto quasi esattamente come lo fa Is.Null.Or.Empty.

Tuttavia, piuttosto che un vincolo separato per questo, voglio affermare suoi singoli componenti, cioè

Assert.That(result, Is.Not.Null); 
Assert.That(result, Is.Not.Empty); 

La ragione mi faccio come cioè che le due condizioni di guasto non si sovrappongono, cioè result potrebbe essere null oppure potrebbe essere vuoto, ma non può essere contemporaneamente. Una singola asserzione composta non distingue tra queste due situazioni, quindi si finisce per andare a un debugger per vedere se result era null o vuoto.

Asserzioni separate, d'altra parte, ti dicono esattamente cosa succede pur rimanendo molto leggibile. Loro "costano" una linea in più per asserzione; Penso che questo sia un costo ragionevole per ottenere informazioni più precise sui potenziali fallimenti.

Problemi correlati