代码之家  ›  专栏  ›  技术社区  ›  Sam Firke

R包中打印函数的测试覆盖率

  •  4
  • Sam Firke  · 技术社区  · 7 年前

    我在R软件包中有一个简单的打印功能:

    print.tabyl <- function(x){
      print.data.frame(x, row.names = FALSE)
    }
    

    我试图实现我的软件包的完全测试覆盖率,但我未经测试的打印功能将我的测试覆盖率降低到99%(否则将是100%)。

    但我不知道如何捕获打印函数的输出,以便为其编写测试。如何编写打印函数的测试?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Sam Firke    7 年前

    根据@alistaire的建议,我使用了 capture.output 编写测试:

    test_that("print.tabyl prints without row numbers", {
      expect_equal(
        mtcars %>% tabyl(am, cyl) %>% capture.output(),
        c(" am 4 6  8", "  0 3 4 12", "  1 8 3  2")
      )
    })
    

    这捕捉到了 row.names 缺失;此结果不同于 capture.output(print.data.frame(mtcars %>% tabyl(am, cyl))) 仍然有行号。

    使用 俘虏输出 这两种方法都测试了功能,并计算了codecov的覆盖率。io的跟踪。