Esistono diversi strumenti su come generare dati di esempio per una determinata espressione regolare. Alcuni includono:Generazione di dati di esempio da regex per verificare le stringhe di input concentrandosi su casi limite definiti in regex
Tuttavia, mentre essi possono essere sufficienti per seminare un set di dati, non aiuta il codice di prova tanto che dipende la regex stesso, come la convalida .
Si supponga di avere un generatore di codice che genera un modello con una proprietà. L'utente specifica un'espressione regolare per convalidare la proprietà. Supponiamo ora che il generatore di codice stia tentando di generare test per garantire che la convalida abbia esito positivo e fallisca in modo appropriato. Sembra ragionevole che lo strumento si concentri sui casi limite all'interno della regex per evitare di generare dati non necessari.
Ad esempio, si consideri una regex ^([a-z]{3,6})$
poi i casi limite comprendono:
- qualsiasi stringa costituita esclusivamente da [az] una lunghezza pari a 2 (guasto)
- qualsiasi stringa costituita esclusivamente da [az] una lunghezza pari a 3 (successo)
- qualsiasi stringa costituita esclusivamente da [az] una lunghezza pari a 4 (successo)
- qualsiasi stringa costituita esclusivamente da [az] una lunghezza pari a 5 (successo)
- un stringa ny costituito solo [az] una lunghezza pari a 6 (successo)
- qualsiasi stringa costituita esclusivamente da [az] una lunghezza pari a 7 (guasto)
- qualsiasi stringa non costituito [az] (guasto)
- qualsiasi stringa non inizia con [az] ma finisce con [az] (guasto)
- qualsiasi stringa che inizia con [az] ma non termina con [az] (guasto)
La ragione concentrandosi sul confine casi è che qualsiasi stringa che consiste solo di [az] con una lunghezza maggiore di 6 verifica il limite superiore della lunghezza della stringa definita nella regex. Quindi testare una stringa di lunghezza 7, 8, 9 sta davvero testando la stessa condizione (limite).
Questa era una regex arbitraria scelta per la sua semplicità, ma qualsiasi ragionevole regex può agire come input.
Esiste un framework/strumenti che il generatore di codice può utilizzare per generare stringhe di input per i casi di test dei diversi livelli dei sistemi generati. I casi di test arrivano da soli quando il sistema non viene più generato e modificato successivamente nel ciclo di sviluppo.
Qual è il punto di questo? Stai provando se la tua regex lib funziona correttamente? O stai scrivendo qualche convalida alternativa (senza regex) e la regex originale è l'unica specifica su cosa sia valido o no? – Qtax
Lo scopo principale è generare test che verifichino la logica di validazione generata dal generatore di codice. Quindi, quando il generatore di codice non viene più utilizzato e lo sviluppatore cambia la logica di convalida, un test potrebbe non riuscire a indicare che potrebbe esserci una regressione. I test non presuppongono che una regex venga utilizzata per la convalida. – bloudraak
L'espressione regolare può essere utilizzata anche in diversi livelli del sistema, ad esempio JavaScript non invadente nel browser, applicazione desktop (WPF), Cmdlet PowerShell, modelli MVC ASP.NET e servizi WCF. Il generatore di codice genera test per verificare che ciascuno esegua la convalida prima di inviare i dati al sistema remoto. – bloudraak