如何用testthat检测R语言中除零操作的非默认处理?
用testthat检测R语言中的除零处理
你不需要硬匹配固定字符串,核心是验证除零时没有返回默认的Inf/NaN,而是返回了自定义内容。可以通过以下方式实现:
核心测试逻辑
只检查返回值的关键特征,而非具体文本:
- 确保结果不是无穷值(Inf)或非数值(NaN)
- 可选:如果要求必须返回提示文本,可额外检查结果为字符类型
修改后的测试代码
test_that("divide by zero returns non-Inf result", { result <- divide(2, 0) # 检测结果不是Inf expect_false(is.infinite(result)) # 可选:如果要求必须返回字符串提示,添加此检查 expect_type(result, "character") })
代码说明
is.infinite(result)判断结果是否为Inf,expect_false()确保这个判断不成立,也就是结果不是Inf- 额外的
expect_type()可以确保用户返回的是字符串类型的提示,而非其他不符合预期的类型 - 如果需要覆盖0/0产生的NaN情况,可再添加
expect_false(is.nan(result))
原测试失败原因
你的原测试硬编码了目标字符串 "Do not divide by 0",但用户实际返回的是 "Do not divide by zero",字符串内容不匹配导致测试失败。新测试逻辑不依赖具体文本内容,只要满足“非Inf”的核心要求就会通过。
内容的提问来源于stack exchange,提问作者KacZdr
相关产品推荐
相关产品推荐

