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

如何为提示用户输入int的方法编写Junit测试

钱运浩
2023-03-14
  • 超出此范围
    • 该方法将不断询问,直到输入正确的数字。列为
    • arrays starting at 0 and returned
    • @param turn Player which ever players turn it is, is asked for a column
    • @return int the column is returned after lowered by one */
      
      System.out.println("\n\n" + turn.getTag() + " please enter the column number, 1-7,  \n"
              + "where you would like to drop your game piece. ");
      boolean colCorrect = false;
      int column = -1;
      while (!colCorrect){
          if(Connect4TextConsole.in.hasNextInt()){
              column = Connect4TextConsole.in.nextInt();
              colCorrect = true;}
          else{ System.out.println("Please enter a number 1 through 7.");
              Connect4TextConsole.in.next();}}
      while(column < 1 || column > 7) {
          System.out.println("Please enter a number 1 through 7.");
          column = Connect4TextConsole.in.nextInt();
      }
      return column - 1; // subtract one to account for array starting at zero
      }``` 
      

共有1个答案

骆鸿运
2023-03-14

在测试代码时,您不需要测试Java的API:您可以假设scanner工作(例如)。

最灵活的实现方法可能是将扫描程序注入到处理用户输入的类中,然后在测试代码中模拟该扫描程序:

class InputHandler {
    private final Scanner input;

    public InputHandler(Scanner input) {
        this.input = input;
    }

    public void nextChoice() {
        int choice = input.nextInt();
        ...
    }
}

那么您的生产代码将如下所示:

InputHandler inputHandler = new InputHandler(new Scanner(System.in));
@Test void option2() {
    Scanner input = mock(Scanner.class);
    when(input.nextInt()).thenReturn(2);
    InputHandler testHandler = new InputHandler(input);
    ...
}

@Test void illegalInput() {
    Scanner input = mock(Scanner.class);
    when(input.nextInt()).thenThrow(InputMismatchException.class);
    InputHandler testHandler = new InputHandler(input);
    ...
}
@Test
void testChoicePrompt() {
    Scanner input = mock(Scanner.class);
    PrintStream output = mock(PrintStream.class);
    InputHandler inputHandler = new InputHandler(input, output);
    inputHandler.nextChoice();
    verify(output).println("Enter choice:");
}        
 类似资料:
  • 我有一个程序,显示与名称和用户需要输入他们的字段。我怎么测试这个? AssertionError:JSON路径“$.FirstName”处没有值,异常:JSON不能为null或空 我的测试: storetest.java

  • 我必须为一个调用API然后处理响应的类编写测试。类有两个公共函数和一个私有函数。第一个公共方法获取ID列表。在循环中为每个ID调用第二个公共方法,以获取与ID关联的详细信息。私有方法是在第二个公共方法内部调用的,因为获取基于id的详细信息的调用是异步进行的。 我是JUnits的新手,虽然我知道我不应该测试API调用,只是测试我的函数,但我仍然不明白单元测试应该断言什么。

  • 在我的项目(spring boot应用程序)中,我有大约200个测试用例。最近,我们为缓存管理器(ehcache)实现了一个工厂bean,它位于我的启动类(@SpringBootApplication)中。 我的问题是,一旦带有工厂bean的启动类被一个测试用例执行,所有后续的测试用例都会失败,并出现错误。。。 “同一个VM中已存在另一个同名“appCacheManager”的CacheManag

  • 我尊敬的java开发者朋友们。我正在尝试测试并覆盖克隆方法的捕获块。我已经浪费了一个星期,但没有找到任何解决方法来弥补这个障碍。请帮帮我。 我的源代码- 我的Junit测试用例- 我已经为图片提供了链接,这将使我对这个问题和我所做的尝试有更多的了解。 源代码- 我尝试过的junit-

  • 我正在尝试为这样的情况编写测试用例,在这个情况下,我期待的是datatruncation异常,我试图使用assert equals和比较消息来断言相同的情况,但是看起来像是比较两个字符串,有没有更好的方法来为这样的异常编写测试用例。 我正在使用JUnit5

  • 问题内容: 我可以为以下代码编写的最 详尽的 测试是什么? 此方法在类内。该方法调用JpaRepository,然后在实体上调用其方法。 如果无法测试是否要删除实体,是否可以在该方法上运行 其他 任何功能? 问题答案: 有两种测试策略。一种是单元测试,即确保您的服务正常运行。另一个是集成/端到端测试,即确保所有功能都能很好地协同工作。 您对自己拥有的东西进行单元测试,对所有内容进行集成测试。这是一