파일을 읽고 쓰는 함수에서 testthat
으로 단위 테스트를하는 가장 좋은 방법은 무엇입니까?파일을 쓰거나 읽는 함수, 또는 포트란 오류에서`testthat`를 이용한 단위 테스트
복잡한 질문을하는 것에 사과드립니다.하지만 여기서 무엇이 잘못 됐는지 확신 할 수 없습니다.
저는 Fortran에서 파일을 읽고 쓰는 많은 기능을 구현했습니다. 그들은 R 패키지 cf로 컴파일됩니다. R 확장 매뉴얼 작성. testthat
으로 단위 테스트를 수행하면 tempfile()을 사용하여 임시 파일에 기록되는 임의의 콘텐츠가 생성됩니다. R 패키지에서 R CMD 확인 실행은 로컬 Windows 컴퓨터에서 작동합니다.
R-devel을 사용하여 실행하는 것은 R-3.5.0 (devel) 용 Rtools를 감지 할 수 없기 때문에 실패합니다. 그래서 우승자에게 제출했습니다. 포트란 소스 대응
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)
:
http://win-builder.r-project.org/ 그러나 다음 오류 실패 포트란 코드 R 패키지 src
서브 디렉토리에 저장된다
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
, 그리고
불려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
}
그렇습니다. Fortran 코드가 잘못되었거나 win-builder 서버에서 발생하는 문제인지 알 수 없습니다.
포트란 코드는 어디에 있습니까? 그 서브 루틴을 어떻게 부르니? 당신이 보여주는 것은 단순히 완전하지 않습니다. –
OK, 그 R 코드에'fn'으로 무엇을 전달합니까? 제발, 우리는 그 것들이 어디에서 왔는지 볼 필요가 있습니다. 실제로, 이것은 * 충분하지 않습니다. 'fn'에는 255 문자가 있어야한다는 것을 알고 있습니다. –
어떻게'testthat'라고 부르시겠습니까? 오류를 발생시키는 코드는 어떻게 보이나요? 오류의 원인이되는 코드가 누락되었습니다. –