簡體   English   中英

用testthat大規模測試唯一性

[英]Mass testing of uniqueness with testthat

我有一個包含使用testthat進行自動化測試的軟件包。 但是,我想知道當人們想要進行大量測試時的最佳實踐是什么。 一種常見的情況是,我正在測試所有參數/參數是否具有唯一性。 這是一個不起作用的示例,可以給出一個想法:

# GG_heatmap --------------------------------------------------------------

#save plots to list
heatmaps = list(
  #various options
  default = mtcars[, c(1,3,4,5,6,7)] %>% GG_heatmap(),
  no_reorder = mtcars[, c(1,3,4,5,6,7)] %>% GG_heatmap(reorder_vars = F),
  no_values = mtcars[, c(1,3,4,5,6,7)] %>% GG_heatmap(add_values = F),
  many_digits = mtcars[, c(1,3,4,5,6,7)] %>% GG_heatmap(digits = 5)
)

test_that("GG_heatmap", {
  #check that plots work
  walk(heatmaps, ~expect_s3_class(., class = "ggplot"))

  #check for non-identity
  #cant think of an easy smart way to do this
  expect_true(!identical(heatmaps$default, heatmaps$no_reorder))
  expect_true(!identical(heatmaps$default, heatmaps$no_values))
  expect_true(!identical(heatmaps$default, heatmaps$many_digits))
  expect_true(!identical(heatmaps$no_reorder, heatmaps$no_values))
  expect_true(!identical(heatmaps$no_reorder, heatmaps$many_digits))
  expect_true(!identical(heatmaps$no_values, heatmaps$many_digits))
})

所以,有一個名為函數GG_heatmap()這是這一個 ,修改了一下)返回一個ggplot2情節。

walk() ,我們僅檢查類是否正確。 我試過了,當類錯誤時,它確實會失敗,並且執行devtools::test()時的測試摘要是正確的,即它確定walk()調用運行4個測試,而不是1個。

在下面的6個測試中,我檢查每個繪圖對象是否不同,即,自變量做了什么,所有這些都互不相同。 就我而言,由於我有4個版本,因此我需要測試6個(即, choose(4, 2) )組合以確保它們都是唯一的。 如果我有10個要測試的參數,這將需要編寫很多手動代碼( choose(10, 2) = 45)。

所以我的問題是,進行此類測試時的最佳實踐是什么? 是否有一項功能可以測試每個對象的唯一性? 我能想到的最好的方法是遍歷以下輸出:

> gtools::combinations(4, 2)
     [,1] [,2]
[1,]    1    2
[2,]    1    3
[3,]    1    4
[4,]    2    3
[5,]    2    4
[6,]    3    4

然后在每一行上調用:

expect_true(!identical(heatmaps[[v1]], heatmaps[[v2]]))

其中v1v2指的是以上各列中的整數。

在您的特定情況下,我想說-無論最終如何實施它們-這些測試都沒有什么價值,它們的結果甚至可能是不可信的。

這些測試沒有什么價值,因為如果通過這些測試,您仍然會獲得非常有限的信息:您將知道所有熱圖看起來都不同(嗯,也許,請參閱下文),但是您將不知道它們是否看起來像您期望的那樣看。 但是,盡管結果不佳,測試仍可能會花費大量時間,而當添加其他熱圖樣式時,測試甚至會大大增加。

就其有限的信息而言,這些測試可能並不可信:根據ggplot的工作方式,即使外觀相同的熱圖也可能不相等,例如,如果該工具向每個生成的熱圖添加了一些時間戳記。 即使該工具今天不能像這樣工作,您將來也可能無法保證。 因此,即使您的測試通過了,有些圖表看起來還是一樣,但是比較起來並不相等。

當然,通過單元測試無法確定熱圖是否看起來像您希望它們看起來那樣。 相反,您需要查看結果輸出-最好將其歸類為系統測試的測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM