Vraag Best Practices van eenheidstest bij het testen van klassen die lezen en schrijven naar het bestandssysteem


Ik heb een klasse die bewerkingen in bestanden op een schijf uitvoert. Meer precies gaat het door een map, leest alle bestanden met een gegeven achtervoegsel en voert een aantal bewerkingen uit op de gegevens en voert deze vervolgens uit naar een nieuw bestand.

Ik ben een beetje dubieus in het ontwerpen van een unittest voor deze klasse. Ik denk dat de installatiemethode een tijdelijke map en tijdelijke bestanden in / tmp / somefolder moet maken, maar ik vermoed dat dit een slecht idee is om een ​​aantal redenen (ontwikkelaars die Windows gebruiken, bestandsmachtigingen enz.).

Een ander idee zou zijn om de klassen te bespotten die ik gebruik om te schrijven en lezen naar de schijf, door de klassen in te kapselen met behulp van een interface en vervolgens een nep-object te bieden, maar het lijkt een beetje rommelig te zijn.

Wat is de standaardmanier om zo'n probleem te benaderen?


13
2017-09-08 08:45


oorsprong


antwoorden:


Jouw strategie is de juiste, IMO. Zorg er wel voor dat je de temp-directory niet hardcodeert. Gebruik System.getProperty("java.io.tmpdir") om het pad van de temp-map te krijgen en een uiteindelijk blok in je test te gebruiken of een @After methode om de gecreëerde bestanden en mappen op te schonen zodra uw test is voltooid.


9
2017-09-08 08:52



Als u JUnit 4.7 en hoger gebruikt, kunt u de @TemporaryFolder regel om op transparante wijze een tijdelijke map te verkrijgen die na elke test automatisch wordt gewist.


11
2017-09-08 12:01



Alles bespotten is mogelijk, maar waarschijnlijk veel meer moeite dan het waard is. U kunt de tijdelijke directory gebruiken die wordt geleverd door Java System.getProperty ("java.io.tmpdir") die u moet kunnen schrijven, enz., Ongeacht het systeem waarop u zich bevindt. Houd het bij korte bestandsnamen en je bent veilig, ook als je op iets ouds loopt.


7
2017-09-08 08:54