簡體   English   中英

如何更正我的GCD功能單元測試

[英]How to correct my unit test for GCD function

我編寫了一個簡單的GCD函數,以實現Euclid算法來計算最大公約數gcd(m,n),這是除以m和n的最大整數k。

我成功編寫的函數可以編譯:

   public static int gcd(int m, int n) {
      if (n == 0) return m;
      return gcd(n, m%n);
   }

但是,當我在GCD上編寫單元測試時遇到錯誤:

   @Test public void gcdTest() {
      for (int m = 0; m < 15; m++) {
      for (int n = 0; n < 15; n++) {
         assertEquals("Divide m,n", m/n%m, Recursion.gcd(m,n));
         }
      }
   }

錯誤出現在“ assertEquals”行中。 我不確定是否可能通過寫m / n%m錯誤地計算了此方法。

有任何提示或建議嗎? 提前致謝。

除了這里的“數學”之外,您不應該立即在單元測試中使用循環。

我的意思是:在考慮在一個循環中迭代並執行多個斷言的測試用例之前,請先執行以下操作

@Test
public void gcdTest1_1() {
   assertThat(Recursion.gcd(1,1), is(1));
}

換句話說:編寫僅測試件事的簡單測試用例。 當第一個通過時,寫下下一個。 然后,當您更有信心時,請考慮使用這種循環解決方案。

這樣一來,您可能會想到除以0 ...並不是測試中不可缺少的東西!

根據您的評論進行編輯:使用see,單元測試的核心思想是它們可以幫助您發現並修復被測代碼中的錯誤。 因此,從您的示例來看,最大的障礙是...您正在打印字符串“ m,n”。 那什么都沒告訴你。 您已經知道您的變量稱為m和n。 最好在斷言失敗的情況下打印m和n的

最后:我更改為assertThat 我發現其他一些斷言風格會導致“更具可讀性”的代碼。 使用該功能時,您將不得不使用is()之類的hamcrest匹配器(google是您的朋友)。

暫無
暫無

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

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