当前位置: 首页 > 知识库问答 >
问题:

如何更正GCD函数的单元测试

景岳
2023-03-14

我编写了一个简单的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来错误计算此方法。

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

共有1个答案

薛承基
2023-03-14

除了“数学”之外,在单元测试中使用循环是你不应该立即做的事情。

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

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

换句话说:编写简单的测试用例,只测试一件事。当第一个通过时,编写下一个。然后,当你更有信心时,再考虑这样的循环解决方案。

因为这可能会让你产生除以0的想法。。。在你的测试中不是一件好事!

根据您的评论进行编辑:使用see,单元测试的核心思想是帮助您发现并修复测试代码中的错误。看看你的例子,最大的障碍是。。。您正在打印字符串“m,n”。这没告诉你什么。您已经知道变量名为m和n。如果断言失败,最好打印m和n的值。

最后:我改成了assertthat;一些其他风格的断言,我发现这导致了“更可读”的代码。当使用它时,你必须使用hamcrest匹配器,比如is()虽然(谷歌是你的朋友)。

 类似资料:
  • 问题内容: 我有一个实现一些WKNavigationDelegate函数的UIViewController,并且我想对这些函数中的逻辑进行单元测试。这是一个例子: 我希望我的单元测试确保基于WKNavigationAction的request.url用正确的WKNavigationActionPolicy调用DecisionHandler。 但是,我不知道如何测试此功能。当我运行测试项目时,在We

  • 问题内容: 我有一堂课要添加单元测试。该类具有多个构造函数,这些构造函数采用不同的类型并将其转换为规范形式,然后可以将其转换为其他类型。 实际上,它接受并转换为其他两种类型。 我正在尝试找出最合适的方法来测试这些构造函数。 应该有一个针对每个构造函数的测试和输出类型: 这导致许多不同的测试。如您所见,我正在努力命名它们。 应该有多个断言: 这有多个断言,这使我感到不舒服。它还正在测试getStri

  • 我正在尝试使用测试驱动设计方法编写一个应用程序--我对单元测试很陌生,所以我只是想知道测试正确输入和异常的正确方法是什么。 我有一个用于加载配置文件的类: null 另外,这3个测试是否都有try{}catch(){}语句?在第一个测试中,正确性是隐含的,在第二个和第三个测试中,我无论如何都在检查异常,所以异常对测试没有影响。

  • 问题内容: 我正在编写一个使用Cairo图形库输出PDF文件的CAD应用程序。许多单元测试不需要实际生成PDF文件,例如计算对象的预期边界框。但是,我想确保在更改代码后生成的PDF文件“看起来”正确。有自动化的方法吗?如何尽可能地自动化?我需要目视检查每个生成的PDF吗?在不拔头发的情况下如何解决此问题? 问题答案: 您可以将PDF捕获为位图(或至少无损压缩)图像,然后将每个测试生成的图像与参考图

  • 我考虑过的一些方法: 将函数移出到实用程序文件中,并在某个标准Python测试库中为该实用程序文件编写测试。可能是最好的选择,尽管这意味着并非所有代码在笔记本中都可见。 使用测试数据在笔记本本身内进行写入断言(给笔记本增加噪声)。 使用专门的Jupyter测试来测试单元格的内容(不要认为这行不通,因为单元格的内容会改变)。

  • 我正在使用 节点14 FireBase-Functions-Test:0.2.3 FireBase-Admin:9.6.0 FireBase-函数:3.13.2 FireBase工具:9.8.0 所以我想使用firebase云函数对我的firestore触发器函数执行单元测试,我从这里的文档中阅读了步骤。 我想使用执行单元测试。所以我假设我将在脱机模式下初始化SDK。文件上说 如果您希望编写完全脱