Pracuję nad projektem z kilkoma formatami plików. Niektóre formaty są określone przez .xsds, inne przez dokumentację na ich stronach internetowych, a niektóre są niestandardowymi formatami wewnętrznymi, które nie mają dokumentacji. Mwahahahaha.
Jaki jest problem?
Chciałbym przetestować moje czytniki plików, ale nie jestem do końca pewien, jak to zrobić. Przepływ aplikacji jest taki:
file.___ ===> read by FileReader.java ===> which creates a Model object
gdzie FileReader
jest interfejs
public interface FileReader {
public Model read(String filename);
}
Model
Ma wiele atrybutów, które są wypełniane, gdy plik jest odczytywany. To wygląda jak
public class Model {
List<String> as;
List<String> bs;
boolean isAPain = true;
// ...
}
Co próbowałem?
Moim jedynym pomysłem było stworzenie „generatorów” plików dla każdego formatu pliku. Generatory te są w zasadzie konstruktorami, które pobierają kilka zmiennych (np. Liczbę komentarzy do wygenerowania w pliku) i generują przykładowy plik, który następnie czytam i porównuję uzyskane wyniki Model
ze zmiennymi, których użyłem do początkowego wygenerowania pliku.
Ma to jednak kilka problemów:
- Pliki, które generuje, nie wyglądają jak prawdziwe pliki. Generator nie jest w żaden sposób świadomy kontekstu.
- Trudno rozpoznać, czy generator wygenerował dla przypadków krawędzi, ponieważ to ja ręcznie ustawiam zmienne. Ta metoda jest niewiele lepsza niż ja, tworząc kilkanaście przykładowych plików.
Czy są na to lepsze sposoby?
EDYCJA: Zmieniłem jednostkę na integrację, ponieważ tak właśnie mam na myśli.
EDIT2: Oto przykład przypadków krawędzi, o których wspomniałem.
Każdy plik reprezentuje wykres złożony z wierzchołków i krawędzi. Te wierzchołki i krawędzie można dołączyć na różne sposoby, więc:
v1 -- e1 --> v2 <-- e2 -- v3
jest inny od
v1 -- e1 --> v2 -- e2 --> v3
w tym kierunku znaczenie mają krawędzie. Nie jestem pewien, czy jest to objęte pytaniem, ale trudno jest wymyślić wszystkie istotne przypadki krawędzi, gdy ręcznie ustawiam liczbę wierzchołków, liczbę krawędzi i po prostu generuję połączenia losowo.
FileReader
implementacji)? Przykład: biorąc pod uwagę przypadki krawędzi znalezione w formatach plików obrazów , dla każdego wpisu tabeli, jeśli obsługiwana jest kombinacja właściwości wiersz / kolumna, powinien istnieć co najmniej jeden przypadek testowy (plik danych) obejmujący tę kombinację.