首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何纠正GCD功能的单元测试

如何纠正GCD功能的单元测试
EN

Stack Overflow用户
提问于 2016-11-10 19:40:53
回答 1查看 976关注 0票数 1

我编写了一个简单的GCD函数来实现欧几里德算法来计算最大公因子gcd(m,n),它是最大整数k除以m和n。

我成功编写的函数编译:

代码语言:javascript
运行
复制
   public static int gcd(int m, int n) {
      if (n == 0) return m;
      return gcd(n, m%n);
   }

但是,当我在GCD上编写单元测试时,我遇到了一个错误:

代码语言:javascript
运行
复制
   @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来计算这个方法的错误。

有什么建议吗?提前谢谢。

EN

Stack Overflow用户

回答已采纳

发布于 2016-11-10 19:46:32

除了这里的“数学”问题,在单元测试中使用循环是您不应该立即做的事情。

我的意思是:在考虑迭代并在一个循环中执行多个断言的测试用例之前,请执行以下操作

代码语言:javascript
运行
复制
@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是您的朋友)。

票数 5
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40535727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档