我编写了一个简单的GCD函数来实现欧几里德算法来计算最大公因子gcd(m,n),它是最大整数k除以m和n。
我成功编写的函数编译:
   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来计算这个方法的错误。
有什么建议吗?提前谢谢。
发布于 2016-11-10 19:46:32
除了这里的“数学”问题,在单元测试中使用循环是您不应该立即做的事情。
我的意思是:在考虑迭代并在一个循环中执行多个断言的测试用例之前,请执行以下操作
@Test
public void gcdTest1_1() {
   assertThat(Recursion.gcd(1,1), is(1));
}换句话说:编写只测试一的简单测试用例。当第一个通过时,写下一个。然后,当你更加自信,然后考虑这样的循环解决方案。
因为这可能会让你想到除以0.在你的测试中不是什么好东西!
编辑您的评论:使用see,核心对单元测试的想法是,它们帮助您在测试中的代码中查找和修复bug。所以看看你的例子,最大的障碍是.你在打印一串"m,n“。这什么都没告诉你。您已经知道变量名为m和n。如果断言失败,最好打印m和n的值。
最后:我更改为assertThat;一些其他类型的断言,我发现这会导致“更易读”的代码。使用它时,您必须使用hamcrest匹配器,如is() (google是您的朋友)。
https://stackoverflow.com/questions/40535727
复制相似问题