2012-02-27 4 views
9

새로운 패키지를 개발 중이며 쓸 단위 테스트가 있습니다. tests/inst/tests/의 차이점은 무엇입니까? 어떤 종류의 물건을 넣어야합니까? 특히R 패키지의 테스트/inst와 테스트/차이점

, 나는 해들리 다음 그들 모두를 실행하는 tests/에 대한 참조를 넣어 ", 또한 그들에 대한 액세스 권한이있는 사용자 있도록"inst/tests/을 사용하는 것이 좋습니다 그 http://journal.r-project.org/archive/2011-1/RJournal_2011-1_Wickham.pdf에서 참조하십시오. 그런데 왜 모두를 tests/에 넣지 않으시겠습니까?

답변

9

@hadley는 바이너리 패키지에서 tests/이 존재하지 않는다는 것을 의미합니다. 소스 패키지에만 있습니다. 규칙은 설치시 inst/의 내용이 패키지 최상위 디렉토리에 복사되므로 inst/tests/은 이진 및 설치된 패키지 디렉토리 구조에서 /tests으로 사용할 수 있습니다.

순열 패키지를 예로 들어 봅시다. 나는 @ hadley의 testthat 패키지를 학습 경험과 패키지 테스트에 사용했다. 패키지는 CRAN입니다. 소스 타르볼을 잡고 두 파일 모두 tests/inst/tests/을 갖고 있는지 확인한 다음 Windows 바이너리를 가져 와서 tests/이라는 알림과 소스에있는 inst/tests의 복사본입니다.

엄밀히 말하면 tests/R CMD check 등으로 실행됩니다. 개발 중에는 프로덕션 패키지의 확인시 패키지가 테스트하는 tests/에 코드가 필요하거나 다른 단위 테스트가 필요합니다. 물론 tests//inst/tests/에있는 R 스크립트를 실행하는 코드가 있습니다. 에 테스트 코드를 패키지 사용자가 사용할 수있게 만드는 부작용이 있습니다.

inst/tests이 필요한지 여부는 최소한 tests/이 필요합니다. 패키지를 개발하는 방법과 사용중인 단위 테스트 코드/패키지에 따라 달라집니다. inst/tests/은 @hadley 옹호자이지만 CRAN의 많은 부분에서 표준이되는 것과는 거리가 멀다.

+0

오, 알겠습니다. 나는 실제로 테스트가/개발자로부터 테스트를보고 있다고 생각했습니다. 나는 그것이 inst/tests /라는 것을 깨닫지 못했다. 감사. –

+1

글쎄, 소금으로 4 번째 단락을 가져 가자. 이것은 Martin Maechler가 초기에 Rmetrics 패키지를 작성한 것으로 거슬러 올라갑니다. 시험을 치르기 전에'inst/tests'가 * 년 전에 사용되었습니다. –

+0

@DirkEddelbuettel 역사 수업을 보내 주셔서 감사합니다. 이것이 마틴 때문인 줄을 몰랐습니다. 그래도 그걸로 참아 라. 마틴 *과 * 해들리가 사용하더라도 ;-) –

5

'Writing R Extensions'에 따르면 inst/tests 만 설치됩니다. 따라서 오직 에 대한 테스트에만 사용할 수 있습니다. 패키지의 소스 버전과 바이너리 (설치됨) 형식입니다.

그렇지 않은 경우 tests/은 물론 일반적인 R CMD check 테스트 용입니다. 이제 Martin Maechler는 tests/에서 'hook'스크립트를 개발하여 inst/tests을 사용했으며, 사용자가 소스를 볼 때 호출 될 수 있도록 허용하는 몇 가지 패키지에서이를 사용했습니다. 따라서 실제로 한 세트의 테스트에서 다른 테스트 세트로 피벗하고 두 세계의 장점을 얻을 수 있습니다.

편집

: https://github.com/eddelbuettel/rprotobuf/blob/master/tests/runUnitTests.R 내가 말했듯이 기본적인 아이디어는 마틴 때문이다 : 여기 우리 RProtoBuf 패키지 테스트 /에서 INST/테스트/테스트를 호출 무엇에 대한 링크입니다.

+0

감사합니다. 내가 "마틴 maechler 테스트 스크립트"에 대한 인터넷 검색하고 당신이 언급하는 것을 찾지 못했습니다, 당신은 그게있을 수도 기억합니까? –

+0

Gavin과 마찬가지로 R-Forge의 Rmetrics 패키지 외에 마틴이 만든 패키지 외에도 내 패키지를 소개 할 수 있습니다. 내 것에 관해서는, RQuantLib은 이것을 수행하고, Rcpp * 패키지 (Romain의 멋진 작업 덕분에 테스트를 기반으로 비 네트를 생성합니다)도 수행합니다. –

+0

위의 URL을 고치기 위해 @ neal-fultz에게 감사드립니다. –

관련 문제