Was ist der beste Weg, Unit-Tests mit testthat
auf Funktionen zum Lesen und Schreiben von Dateien zu machen?Unit-Test mit `testthat` auf Funktionen, die Dateien schreiben/lesen, oder einen Fortran-Fehler
Entschuldigung für eine komplizierte Frage zu stellen, aber ich bin mir nicht sicher, was hier falsch ist.
Ich habe in Fortran eine Reihe von Funktionen implementiert, die Dateien lesen und schreiben. Sie sind in einem R-Paket zusammengestellt, vgl. Schreiben R Erweiterung Handbuch. Mein Unit-Test mit testthat
generiert zufälligen Inhalt, der mit tempfile() in temporäre Dateien geschrieben wird. Running R CMD-Prüfung für das R-Paket funktioniert auf meinem lokalen Windows-Rechner.
Das Ausführen mit R-devel schlägt jedoch fehl, weil Rtools für R-3.5.0 (devel) nicht erkannt werden kann. Also habe ich mich dem Win-Builder unterzogen.
http://win-builder.r-project.org/ scheitert jedoch mit dem folgenden Fehler:
At line 9 of file auxil.f95
Fortran runtime error: Actual string length is shorter than the declared one for dummy argument 'fn' (96/255)
mit Fortran Quelle entspricht:
subroutine get_nlines(fn, nlines, stat) !line 9
implicit none
!! Arguments
character(255), intent(in) :: fn
integer, intent(out) :: nlines, stat
!! Local variables
character(len=1) :: one
nlines = 0
open(40, file=fn, status='OLD')
do
read(40, *, iostat=stat) one
if (stat /= 0) exit
nlines = nlines + 1
end do
close(40)
end subroutine
FORTRAN-Code im src
Unterverzeichnis des R-Pakets gespeichert ist, und wird als mit
get_nlines <- function(fn) {
stopifnot(file.exists(fn))
res <- .Fortran('get_nlines', fn=as.character(fn), nlines=integer(1), stat=integer(1))
if (res$nlines == 0 & res$stat != 0) {
warning(paste0('get_nlines did not read lines; IOSTAT error ', res$stat, '.'))
return(structure(NA, code=res$stat))
}
res$nlines
}
So ist es. Ich weiß nicht, ob mein Fortran-Code falsch ist oder ob etwas auf dem Win-Builder-Server auftritt.
Wo ist Ihr Fortran-Code? Wie nennst du diese Subroutine? Was du zeigst, ist einfach nicht vollständig. –
OK, und was gibst du als 'fn' an diesen R-Code? Bitte, wir müssen sehen, woher diese Dinge kommen. Wirklich, das ist * nicht * genug. Wir wissen nur, dass 'fn' 255 Zeichen haben muss. –
Wie nennt man 'testthat'? Wie sieht der Code aus, der den angezeigten Fehler verursacht? Uns fehlt einfach jeder Code, der den Fehler verursacht. –