Ja! Sie können dies programmatisch und automatisch behandeln. Lassen Sie mich ausführlich auf zwei Arten Ich habe ein:
Implizit über Versionsnummern: Dies ist der von RCPP genommen Ansatz für viele Jahre, und es ist ganz allgemein und nicht abhängig von jedem anderen Paket . Unsere Tests beginnen mit einer Datei in tests/
und übergeben dann an RUnit, aber dieser letzte Teil ist ein Implementierungsdetail.
In der Hauptdatei tests/doRUnit.R
wir dies tun:
## force tests to be executed if in dev release which we define as
## having a sub-release, eg 0.9.15.5 is one whereas 0.9.16 is not
if (length(strsplit(packageDescription("Rcpp")$Version, "\\.")[[1]]) > 3) {
Sys.setenv("RunAllRcppTests"="yes")
}
Im Wesentlichen wir testen, ob die Version des Formulars a.b.c.d ist - und wenn ja dem Schluss, dass es sich um eine Entwicklungsversion ist. Dies bedeutet "Alle Tests ausführen". Während eine Release-Version des Formulars a.b.c zu CRAN gehen würde und diese Tests nicht ausführen würde, da sie ihr Zeitlimit überschreiten würden.
In jedem der actual unit test files, können wir dann entscheiden, ob wir die Variable und überspringen Sie den Test ehren wollen, wenn gesetzt, oder führen Sie trotzdem:
.runThisTest <- Sys.getenv("RunAllRcppTests") == "yes"
if (.runThisTest) {
## code here that contains the tests
}
Dieser Mechanismus ist vollautomatisch, und hängt nicht von der Benutzer. (In der aktuellen Paketversion gibt es einen weiteren if()
Test, der darin eingeschlossen ist, der uns erlaubt, die Tests zu unterdrücken, aber das ist ein Detail, das wir hier nicht brauchen).
Ich mag diesen Ansatz immer noch sehr.
Explizit über Ressourcendateien Ein anderes Paket, an dem einige von uns arbeiten (in letzter Zeit), erfordert ein bestimmtes Backend. So testen wir im Rblpapi-Paket auf das Vorhandensein einer Datei, die meine Co-Autoren und ich jeweils unter unserem Verzeichnis $HOME
haben, um Anmeldeinformationen und Verbindungsdetails einzurichten. Wenn die Datei fehlt - wie z.B. Auf Travis CI oder CRAN oder für andere Benutzer werden die Tests übersprungen.
Wir entschieden uns, die Ressourcendatei als R-Datei zu verwenden; es sources it if found and thereby sets values for options()
. Auf diese Weise können wir direkt steuern, ob Tests gestartet werden sollen oder nicht.
## We need to source an extra parameter file to support a Bloomberg connection
## For live sessions, we use ~/.Rprofile but that file is not read by R CMD check
## The file basically just calls options() and sets options as needed for blpHost,
## blpPort, blpAutoConnect (to ensure blpConnect() is called on package load) and,
## as tested for below, blpUnitTests.
connectionParameterFile <- "~/.R/rblpapiOptions.R"
if (file.exists(connectionParameterFile)) source(connectionParameterFile)
## if an option is set, we run tests. otherwise we don't.
## recall that we DO need a working Bloomberg connection...
if (getOption("blpUnitTests", FALSE)) {
## ... more stuff here which sets things up
}
Ähnlich wie beim ersten Anwendungsfall können nun weitere Variablen festgelegt werden, die später getestet werden.
Explizit über Travis CI Eine weitere Option, die wir in rfoaas verwenden ist die Umgebungsvariable regelt dies in den Travis CI file einzustellen:
env:
global:
- RunFOAASTests=yes
die die tests script then picks up:
## Use the Travis/GitHub integrations as we set this
## environment variable to "yes" in .travis.yml
##
## Set this variable manually if you want to run the tests
##
if (Sys.getenv("RunFOAASTests=yes") == "yes") runTests <- TRUE
In diesem Fall I Setzen Sie auch den Schalter auf der Basis meiner Benutzer-ID, da ich so ziemlich alleine zum Projekt beitragen kann:
## Also run the tests when building on Dirk's box, even whem
## the environment variable is not set
if (isTRUE(unname(Sys.info()["user"])=="edd")) runTests <- TRUE
Explizit über eine andere Variable Sie können sich natürlich auch auf eine andere Variable verlassen, die Sie für alle Ihre Pakete verwenden. Ich finde das eine schlechte Idee. Wenn Sie dies in Ihrer Shell festlegen, arbeiten Sie an Paket A und legen Sie fest, dass es Tests unterdrückt, aber dann zu Paket B wechselt - Sie werden wahrscheinlich vergessen, die Variable zu deaktivieren, und können dann nicht testen. Ich mag diesen Ansatz am wenigsten und verwende ihn nicht.
Verwenden Sie env var lokal definiert, oder teilen Sie Tests in mehrere Dateien auf und beenden Sie sie jeweils mit 'q (save =" no ")'. – jangorecki