ho una classe che consumano un file XML e produrre output di testo in base all'input. Sia l'input che l'output sono piuttosto complessi e l'output può includere anche le cose non nell'input: ad es. include timestamp e i risultati dei dati in tempo reale che non sono controllati dall'input - con altre parole: la classe non è una trasformazione di input-output pura.Come abbinare testo contro i modelli in unità di test
Vorrei testare l'output di testo risultante utilizzando JUnit. Poiché il testo prodotto può variare in molti modi diversi in base all'input, mi piacerebbe essere in grado di abbinare parti specifiche dell'output a una sorta di modello in ogni test. Ogni modello dovrebbe consentire per alcuni semplici sostituzioni di testo e anche per gli intervalli nel testo che dovrebbe non essere abbinato.
La questione è se tali quadri esiste già?
Una possibilità di livello molto basso sarebbe utilizzare alcune espressioni regolari fantasiose per abbinare il testo, ma penso che saranno un po 'troppo limitate per il nostro utilizzo in quanto non si dispone di un contesto sufficiente nelle espressioni regolari ...
EDIT: Due commenti:
- una delle funzioni della classe è la capacità di fare certe semplici tipi di aggregazione di dati e calcoli (ad esempio somme) sulla base di input. Mi piacerebbe testare, senza testare anche il resto del testo generato.
- vorrei che fosse possibile apportare modifiche al codice di base esistente, ma è un grande mandrino di codice legacy che davvero non voglio refactoring. Quindi l'introduzione di servizi di simulazione o test di pezzi più piccoli non sarà possibile.
Un'altra possibilità è rendere l'ambiente del test dell'unità più controllato fornendo un finto feed di dati in tempo reale che non cambia mai. – dasblinkenlight
@dasblinkenlight Sfortunatamente, questo non è possibile a meno che non apporti alcune modifiche massicce al codice ... comunque, mi piacerebbe essere in grado di testare i vari effetti di piccole modifiche nell'input - nel qual caso non voglio controlla il risultato completo, ma solo alcuni effetti localizzati ... –
Forse è sufficiente testare se la parte che ti aspetti viene trasformata e da qualche parte nel testo. Se non sta cambiando, puoi semplicemente usare 'xml.contains (" la tua stringa ")'. Lo sto facendo in una situazione simile. – cringe