Ho un test parametrizzato con 2 varianti:
-
NULL
valore
e
- qualsiasi valore
NOT NULL
Da questo valore dipende un assert:
- Nel caso in cui
NULL
dovrebbe essere controllato se l'oggetto hafield1
convalue1
- Nel caso in cui
NOT NULL
dovrebbe essere controllato se l'oggetto hafield2
convalue2
Come ho detto (vedi xUnit Tests Patterns ) usando le dichiarazioni condizionali in assert è anti-pattern.
Come posso risolvere questo problema correttamente?
In questo momento sto provando ad applicare il modello di asserzione di Guardia:
-
if
-assertion è diviso in 2 asserzioni -
All'inizio c'è il controllo dei parametri di test (
NULL
/NOT NULL
) con guardia assertion :it('case describing conditionalParamter=NOT NULL'): expect(conditionalParamter, 'to be a', 'string') // Guard assertion which can FAIL test. Is it OK? Can I simply **SKIP** assertion WITHOUT test failing expect(myStub.args, 'to satisfy', [[ nonConditionalParamter, ExpressionWhichUsesNonNullConditionalParamterValue ]]) it('case describing conditionalParamter= NULL') expect(conditionalParamter, 'to be falsy') // Guard assertion. The same issue expect(myStub.args, 'to satisfy', [[ nonConditionalParamter, ExpressionForNullConditionalParamterValue ]])
Ma in questo caso abbiamo 2 asserzioni fallite. È la soluzione appropriata?
Esistono modi migliori per risolvere il problema?