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

是否有一种方法让JUnit测试通过iff方法实现是正确的和递归的?

秋煌
2023-03-14

我正在设置一些实际的考试,并要求某些方法的实现是递归的。是否有一种方法使JUnit测试只有在方法的实现是递归的(当然是正确的)时才能通过?

import static org.junit.Assert.*;
import org.junit.*;
import java.io.*;
import java.text.*;
import java.util.*;
import org.junit.rules.*;
import java.lang.reflect.*;

public class Service { //begin class 
    /**
     * @param n: assumed to be more than 0
     * @param d, d >= 0 and d <= 9
     * @return true if number n contains the digit d, false otherwise
     * you may assume that 0 itself doesn't contain ANY digit (not even 0)
     * NOTE: This method must be implemented recursively.
     * hint: n%10 gives the last digit, n/10 gives the rest of the number
     */
    public static boolean containsDigit(int n, int d) {
        return false; //to be completed
    }

    @Test
    public void testContainsDigit() {
        assertTrue(Service.containsDigit(1729, 1));
        assertTrue(Service.containsDigit(1234567890, 2));
        assertFalse(Service.containsDigit(1729, 8));
    }
}
    public static boolean containsDigit(int n, int d) {
        if(n == 0) 
            return false;
        if(n%10 == d)
            return true;
        return containsDigit(n/10, d);
    }

和失败的迭代(即使是正确的)实现,如:

    public static boolean containsDigit(int n, int d) {
        while(n > 0) {
            if(n%10 == d) {
                return true;
            }
            n/=10;
        }
        return false;
    }

我们将非常感谢在正确方向上的任何帮助或指导。

共有1个答案

姬念
2023-03-14

JUnit本身没有工具来检查流是递归的还是迭代的,但它肯定可以检查调用返回正确的结果。

现在也不可能从“早期”执行中收集堆栈痕迹。

我看不出mocks在这方面有什么帮助,但我可能遗漏了一些东西,也许我们的同事会为此提供一个例子,不过我建议使用以下方法:

    null
 class MyServiceForChecks extends Service {
      private List<StackTraceElement[]> invocationStackTraces = new ArrayList<>(); 

      public boolean containsDigit(int n, int d) { // its not static anymore
           StackTraceElement [] stackTrace =  getStackTrace();
           invocationStackTraces.add(stackTrace); 
        return super.containsDigit(n,d);
      }

      public List<StackTraceElement[]> getInvocationStackTraces () {
           return this.invocationStackTraces;
      }
 }

在JUnit中,测试MyServiceForChecks类,而不是Service类。在ContainsDigits方法完成执行后,您可以调用GetInvocationStackTraces方法并分析结果。

如果无法创建MyServiceForChecks类,则可以使用CGLIB库动态生成它。

 类似资料:
  • 问题内容: 因此,我敢肯定那里有类似的东西,但是我一直在寻找一个小时,却没有找到我真正想要的东西。说我有一堂课,看起来像这样: 我该如何做这样的工作? 问题答案: 使用Mockito,您可以像这样 监视真实对象 : 有一些陷阱,因此也请查看相关文档。

  • 问题内容: 在我使用的许多代码中,都有一些可怕的东西,例如: 或者-更糟糕的是: 有正确的方法来: 创建一个新的URL(或者它是一个URI)。 向其添加正确的转义参数。 在这些参数中添加格式正确的文件路径。 将其解析为字符串。 从本质上讲,仅构建字符串比正确地构建字符串太容易了。有没有一种方法可以像构建字符串一样容易 地正确 完成呢? 添加 为了清楚起见-经过一番思考-我想我正在寻找类似的东西:

  • 本文向大家介绍PHP实现递归目录的5种方法,包括了PHP实现递归目录的5种方法的使用技巧和注意事项,需要的朋友参考一下 项目开发中免不了要在服务器上创建文件夹,比如上传图片时的目录,模板解析时的目录等。这不当前手下的项目就用到了这个,于是总结了几个循环创建目录的方法。 方法一:使用glob循环 方法二:使用dir && read循环 方法三:使用opendir && readdir循环  方法四:

  • 在空手道中,我希望有一个模式变量,它是响应数据的超集,这样我就可以用相同的模式测试多个请求。 这对于GraphQL应该特别有用,因为请求本身定义了返回的字段。 预期模式: 回答数据: 在本例中,响应返回的所有键。数据应该在架构中,但架构中的任何键都不在响应中。数据应该被忽略。 在空手道中有没有办法做到这一点,或者有没有计划在将来增加这一功能? 编辑:更新了示例,因为唯一遗漏的属性是一个可为空的属性

  • 我一直得到这个错误与我的SQL:我的SQL是正确的,它的工作在控制台中,但不是在python文件中。我认为错误是在参数中,因为代码似乎工作,就在参数之后,我的打印(完成)不打印:)但我看不到它:/ 这是我的代码(顺便说一句,我在数据库中使用全局变量g,它在我的其他函数中工作):

  • 本文向大家介绍Python实现检测服务器是否可以ping通的2种方法,包括了Python实现检测服务器是否可以ping通的2种方法的使用技巧和注意事项,需要的朋友参考一下 好想在2014结束前再赶出个10篇博文来,~(>_<)~,不写博客真不是一个好兆头,至少说明对学习的欲望和对知识的研究都不是那么积极了,如果说这1天的时间我能赶出几篇精致的博文,你们信不信,哈哈,反正我是信了。。。 python