I haben folgende Funktion:R TryCatch mit testthat Erwartung
fun = function(expr) {
mc = match.call()
env = as.environment(within(
list(),
expr = eval(mc$expr)
))
return(env)
}
, die so innerhalb eines tryCatch()
aufgerufen wird, dass alle Fehlerbedingungen in expr
ordnungsgemäß gehandhabt werden.
Es arbeitet mit einem Standard-Fehlerzustand fein:
tryCatch({
fun({
stop('error')
})
}, error = function(e) {
message('error happened')
})
# error happened
Allerdings ist es nicht testthat
Erwartungsfehler erfassen (was für meinen speziellen Anwendungsfall bevorzugt wird):
library(testthat)
tryCatch({
fun({
expect_true(FALSE)
})
}, error = function(e) {
message('expectation not met')
})
# Error: FALSE isn't true.
oder einfacher :
library(testthat)
tryCatch({
expect_true(FALSE)
}, error = function(e) {
message('expectation not met')
})
# Error: FALSE isn't true.
Der Erwartungsfehler wird nicht abgefangen.
Dieses Problem trat nach dem Upgrade von R 3.2.2 auf R 3.3.0 auf - d. H. Erwartungsfehler wurden gerade in R 3.2.2 behoben.
Gibt es eine Möglichkeit, testthat
Erwartungen von tryCatch()
in R 3.3.0 gefangen zu machen?
Die 'expect_xxx' Funktionen aufrufen' expect' die wiederum ruft 'withRestarts'. Ich weiß nicht genau, was das ist, aber es scheint die Wurzel des Problems zu sein, das du hast. – Dason
@Dason Ja, das habe ich bemerkt. Ich bin mir nicht sicher, ob das immer der Fall war (z. B. zurück als ich meinen Code mit R 3.2.2 entwickelt habe). Idealerweise würde ich es vorziehen, sein aktuelles Verhalten ohne Affenflicken zu umgehen. – oddHypothesis