Ich habe einige besonders pingelig Code, der auf verschiedenen Plattformen unterschiedlich verhält, sondern auch verhält sich anders laufen, wenn unter valgrind
... jetzt weiß ich, dass esexpect_error_or_warning in testdas? wenn laufen auf 32-Bit-Linux-
- eine Warnung gibt nicht unter valgrind
- gibt einen Fehler, wenn an anderer Stelle oder auf 32-Bit-Linux liefen mit
R -d valgrind
den folgenden Code über Werke (sorry für den Mangel an repr Wenn Sie nicht unter valgrind
laufen, aber unter valgrind
schlägt es fehl, weil wir einen Fehler statt einer Warnung erhalten.
if (sessionInfo()$platform=="i686-pc-linux-gnu (32-bit)") {
expect_warning(update(g0, .~. +year), "failed to converge")
} else {
expect_error(update(g0, .~. +year), "pwrssUpdate did not converge in")
}
Ich möchte eine expect_warning_or_error()
Funktion; Ich nehme an, ich könnte einen machen, indem ich zusammen die Eingeweide von expect_error
und expect_warning
hacken, die nicht kompliziert aussehen, aber andere Vorschläge begrüßen.
Alternativ könnte ich herausfinden, wie ich feststellen kann, ob ich unter valgrind
oder nicht (scheint härter) läuft.
Ein Art-reproduzierbaren Beispiel:
library(testthat)
for (i in c("warning","stop")) {
expect_warning(get(i)("foo"))
expect_error(get(i)("foo"))
}
das ist ziemlich gut, ich kann es akzeptieren. Ich habe auf etwas mehr "testthat-idiomatisch" gehofft; Ich zerhacke etwas, das nicht großartig ist, aber das ich posten kann. Ihr erfüllt sicherlich die grundlegenden Anforderungen. –