如何使用扫描仪测试 JUnit 方法?

2023-12-06

我有一个类,它读取文件并使用扫描仪接收用户输入,如果扫描仪等于该文件中一行的一部分,它将显示同一行中的字符串。

我该如何为此创建一个 Junit 测试方法?

这是我想要测试方法的一些代码:

Scanner Input = new Scanner(System.in);
    String name = Input.nextLine();

    BufferedReader br;
   try{
       br = new BufferedReader(new FileReader(new File(filename)));
       String nextLine;
       while ((nextLine = br.readLine()) != null)
       {
           if (nextLine.startsWith("||"))
           {
                int f1 = nextLine.indexOf("*");
                int f2 = nextLine.indexOf("_");
                fName = nextLine.substring(f1+1, f2);
                   if (name.equals(fname))
                   {
                        String[] s1 = nextLine.split("_");
                        String sName = s1[1];
                        System.out.println(sName);
                   }
           }
       }

我的数据文件看起来像这样

||
*Jack_Davis
*Sophia_Harrolds

我尝试在我的测试方法中使用此代码

@Test
public void testgetSurname() {
    System.out.println("get surname");
    String filename = "";
    String expResult = "";
    String result = fileReader.getSurname(filename);
    assertEquals(expResult, result);

    filename = "datafiles/names.txt";
    String data = "Jack";
    InputStream stdin = System.in;
    try{
      System.setIn(new ByteArrayInputStream(data.getBytes()));
      Scanner scanner = new Scanner(System.in);
      System.out.println(scanner.nextLine());
    } finally {
      System.setIn(stdin);
      expResult = "Davis";
    }
    String result = fileReader.getSurname(filename);
    assertEquals(expResult, result);                
}

试试这个例如:

您可以通过自动模拟控制台来增强它(见下文)

@Test
public void test_scan() throws Exception
{
Myclass myobject=new myobject(); // with args

myobject.load(filename); // you must definie the filename

String result=myobject.scaninput_and_compare(); // you must use scan in, and compare

if (!result.equals(what_I_am_expecting) throw new Exception("EXCEPTION scaninput_and_compare"); 

// If you arrive here, it's OK
}

如果您想自动化控制台输入,请使用:

致谢:JUnit:如何模拟System.in测试?

String data = "What_I_could_put_in_console";
InputStream stdin = System.in;
System.setIn(new ByteArrayInputStream(data.getBytes()));
Scanner scanner = new Scanner(System.in);
System.setIn(stdin);

当心里面的catch Exception,以一个“好的”System.in 结束,单独测试一下就可以了,对于几个,你应该验证一下。

用你的代码:

public String scaninput_and_compare(String filename)
{
Scanner Input = new Scanner(System.in);
String name = Input.nextLine();

BufferedReader br;
 try{
   br = new BufferedReader(new FileReader(new File(filename)));
   String nextLine;
   while ((nextLine = br.readLine()) != null)
   {
       if (nextLine.startsWith("||"))
       {
            int f1 = nextLine.indexOf("*");
            int f2 = nextLine.indexOf("_");
            fName = nextLine.substring(f1+1, f2);
               if (name.equals(fname))
               {
                    String[] s1 = nextLine.split("_");
                    String sName = s1[1];
                    return sName;
               }
       }
   }
// NO GOOD
return "lose";
}


@Test
public void test_scan() throws Exception
{
Myclass myobject=new myobject(); // with args

String filename="good_filename";

// MOCK System.in
String data = "Jack";
InputStream stdin = System.in;
System.setIn(new ByteArrayInputStream(data.getBytes()));

String result=myobject.scaninput_and_compare(filename); // you must use scan in, and compare

// RESTABLISH System.in
Scanner scanner = new Scanner(System.in);
System.setIn(stdin);

if (!result.equals("Davis") throw new Exception("EXCEPTION scaninput_and_compare"); 

// If you arrive here, it's OK
}

更好的设计,测试更容易:将 System.in 扫描仪与文件解析分开。只需使用 (filename, fname) 执行一个函数,它将直接进行测试:

assertEquals(myobject.scaninput_and_compare(filename,"Jack"), "Davis");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用扫描仪测试 JUnit 方法? 的相关文章

随机推荐

  • 使用 Scanner 类时如何忽略 .txt 的第一行

    我有一个文本文件 内容如下 Description SKU Retail Price Discount Tassimo T46 Home Brewing System 43 0439 6 17999 0 30 Moto Precise Fi
  • 数据框:单元格级别:将逗号分隔的字符串转换为列表

    我有一个 CSV 文件 其中包含有关汽车行程的信息 我想整理这些数据 以便为每个旅程 每一行 提供一个列表 该列表应包含作为列表中第一项的旅程代码 然后将所有后续 MGRS 单元作为单独的项目 最后 我希望将所有这些旅程列表分组到父列表中
  • 是否可以在 Azure 上运行 KVM

    Azure Fabric 似乎运行在 Hyper V 的定制版本上 是否可以在 Azure 上运行 KVM 虚拟化实例 使用嵌套虚拟化 我有一个基于 Debian 的自定义 VHD 比如说 根据本文档https learn microsof
  • 全屏背景视频?

    我想知道是否有人考虑过或遇到过任何现实的方法来为网站提供全出血背景视频 而不会导致网站速度非常慢 理想情况下我不想使用 Flash 我所说的全出血是指从屏幕的边缘到边缘 就像桌面壁纸一样 如果你不想要闪光灯那么尝试使用银光
  • 使用maven和jenkins,如何测试程序员是否做了一些测试用例?

    我正在开发许多项目 我们使用 Java Springs Maven 和 Jenkins 进行 CI 但我遇到了一些程序员没有向项目添加真正的 junit 测试用例的问题 我希望 maven 和 jenkins 在部署到服务器之前运行测试 一
  • 通过 Azure Functions 对 Azure AD 中的用户进行身份验证(验证用户名和密码)

    是否可以创建一个将用户名和密码作为输入参数的 Azure 函数 并且函数应该根据 Azure AD 验证用户 首先 值得一提的是 将 Azure AD 用户的用户名和密码作为应用程序 Azure 函数或 Web 应用程序或您正在开发的任何其
  • R中的线性回归无需复制内存中的数据?

    进行线性回归的标准方法是这样的 l lt lm Sepal Width Petal Length Petal Width data iris 然后使用predict l new data 进行预测 其中 new data 是一个数据帧 其列
  • 显示为对话框时,派生小部件不以父部件为中心

    我有一个从 QWidget 派生的类 MyListWidget 我将父级和标志传递给基类 QWidget 构造函数 在测试中尝试了 Qt Dialog 和 Qt Popup 但自定义小部件显示在屏幕中央 而不是以其父级为中心 MyListW
  • 在 JavaScript 中旋转后调整逻辑大小以保持固定角

    后面如何计算或者逻辑得到旋转后调整大小 用一个固定角 时平移 x 和 y 下图显示了基于角的调整大小与未旋转的 div 完美配合 rotate 0deg 我处理基于中心的旋转和调整大小没有任何问题 但问题是 我需要一个调整旋转 div 大小
  • Google Pub/Sub 推送消息不适用于启用 IAP 的应用程序引擎

    我正在测试一个非常基本的 Pub Sub 订阅 我将推送端点设置为通过 App Engine 中的 Python Flex 服务部署的应用程序 该服务位于启用了身份感知代理的项目中 IAP 配置为允许通过我们的域进行身份验证的用户通过 我没
  • 从 pandas 中特定列的 DF 中提取最大值、最小值或标准差

    我有一个包含 X1 Y1 Z3 列的 df df describe显示每列的统计信息 我想提取 Z3 列的最小值 最大值和标准差 df df z3 idxmax 似乎不起作用 熊猫的新功能0 20 0 pd DataFrame agg df
  • 通过 AWK 连接两个具有多列的文件

    首先 我必须道歉 我知道有很多不同的主题已经回答了我的问题 但是正如您自己所看到的 AWK 并不是我真正的好朋友 你们都知道这个故事 对吧 嘿 随机的员工 你是被选中的人 我需要你学习这个我们都不知道的奇怪的事情 你的截止日期是明天 祝你好
  • Docker 错误:映射卷中的 CSS 文件无法更新

    系统设置 Docker 版本 1 9 1 构建 a34a1d5 Oracle VirtualBox 4 3 34r104062 Image https hub docker com r rc42 flaskserver 当我在 Flask
  • Android 中的滚动字幕文本

    我需要制作一个制作人员名单 Activity 在我的游戏中 它只是垂直滚动的文本行 没有任何图像 滚动将自动执行 不允许用户交互 就像从下到上的电影片尾一样 最后一个文本行消失在屏幕顶部上方后 它应该重新启动 我该怎么做 只需使用就足够了T
  • JBOSS-LOCAL-USER:javax.security.sasl.SaslException:无法读取服务器质询

    当我想从不同的服务器访问远程 Wildfly 服务器上的 EJB 时 出现以下错误 Error Authentication failed all available authentication mechanisms failed JBO
  • 如何将 Bootstrap Carousel 幻灯片更改为滚动?

    我在用引导轮播在我的网站上 但我希望它的功能略有不同 我希望幻灯片在鼠标滚动时发生变化 每次鼠标滚动时每张幻灯片 如何使用 Bootstrap Carousel 实现它 myCarousel carousel interval 3000 j
  • spring security - 如何删除某些 url 模式中的缓存控制

    我正在尝试过滤一些 url 模式以进行缓存 我尝试的是将一些代码放入WebSecurityConfigurerAdapter执行 Override protected void configure HttpSecurity http thr
  • “dateAdded”的默认值无效

    我遇到了一个无法修复的愚蠢的 SQL 问题 ALTER TABLE news ADD dateAdded DATETIME NOT NULL DEFAULT CURRENT TIMESTAMP AUTO INCREMENT ADD PRIM
  • 防止直接访问 IIS 服务器上的文件

    我有两台服务器 一台用于我的 mvc 应用程序 另一台用作图像等大文件的存储 两者都运行在 Windows Server 2012 R2 上 如何防止直接访问存储服务器上的文件 说 mvc 已开启IP1 并且存储已打开IP2 到文件的链接如
  • 如何使用扫描仪测试 JUnit 方法?

    我有一个类 它读取文件并使用扫描仪接收用户输入 如果扫描仪等于该文件中一行的一部分 它将显示同一行中的字符串 我该如何为此创建一个 Junit 测试方法 这是我想要测试方法的一些代码 Scanner Input new Scanner Sy