[英]What is the right way to solve Codility's PermMissingElem test? (Java)
[英]What is the “right” way to test the output of Java methods?
在 Python 中,我經常有如下所示的測試:
tests = [
(2, 4),
(3, 9),
(10, 100),
]
for (input, expected_output) in tests:
assert f(input) == expected_output
在 Java 和 JUnit 中編寫這樣的測試(其中指定一組測試用例,然后循環運行每個測試用例)的“正確”方法是什么?
謝謝!
先發制人的回應:我意識到我可以做類似的事情:
assertEquals(4, f(2))
assertEquals(9, f(3))
....
但是...我希望有更好的方法。
一樣。
int[][] tests = {
{2, 4},
{3, 9},
{10, 100}
};
for (int[] test : tests) {
assertEquals(test[1], f(test[0]));
}
當然不如 python 漂亮,但很少有東西。
您可能還想研究JUnit 理論,一個未來的功能......
正確的方法是編寫單獨的斷言語句,即使您不喜歡它。
它避免了不必要的復雜性,並且當它失敗時,有時更容易查看哪個值失敗(無需啟動調試器)。
但是,如果您自動生成測試數據,那就另當別論了。
嗯...
int[][] tests = new int[][]{
{2, 4},
{3, 9},
{10, 100},
};
for(int[] i : tests)
{
assertEquals(i[1], f(i[0]);
}
一樣的,真的。 唯一的問題是 Java 缺少元組文字,因此對於更復雜的情況,您必須使用 Object[] arrays 並進行轉換,或者編寫一個元組 class。
難道你不只是定義一個簡單的 class 兩個字段,真實結果和預期結果,然后以類似於你的 Python 片段正在做的方式循環集合嗎?
There are no tuples in Java, but you could use a Map or two parallel arrays to specify input/output pairs and then do a loop just like your Python example.
絕對不是單元測試方面的專家,但我更願意為我正在測試的每個案例使用一個單獨的方法,並使用一些測試運行工具(如 NUnit-GUI,用於 C#)。 這樣我就可以確切地知道哪種情況會失敗,如果確實如此。 它還有更多的工作要做,但我認為它最終會得到很好的回報。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.