有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在程序中获得JUnit类,以便在提示后向控制台提供字符串输入?

我有一个带有main()方法的程序,它在运行的两个不同时间向用户请求一行输入。然后,它获取这两行输入,并以特定的方式对它们进行比较

我有一个JUnit测试类,它初始化了6个字符串(string1, string2,...,string6),当程序提示用户这样做时,我不知道如何获取这些字符串并通过将它们发送到System.in来模拟用户输入

基本上,在程序的第一次运行时,程序会说“请输入您的第一个字符串”,然后会说“请输入您的第二个字符串”在这两个提示下,我想分别从测试类中输入string1string2。然后,在程序的第二次运行时,我想输入string3string4

有办法做到这一点吗?我试着尽可能让人理解这一点,但如果我在努力让别人理解我的观点,我会理解的。如果你有什么不明白的地方,请告诉我,我会尽力澄清任何模糊的细节


共 (2) 个答案

  1. # 1 楼答案

    您应该重构代码,将执行计算的部分与从控制台获取输入的部分分开。然后,通过将必要的输入作为参数传递,您可以非常轻松地为执行计算的部件编写测试。与控制台一起工作的部分通常非常简单,不需要测试

    在不重构代码的情况下测试这一点相当复杂。你需要更换系统。在和系统中。通过成对的PipedInputStream和PipedOutStream输出。然后需要启动一个线程,从连接到系统的PipedInputStream读取数据。当它看到输入提示时,将预期的输入写入连接到系统的PipedOutputStream。进来

  2. # 2 楼答案

    您可以使用库System RulesTextFromStandardInputStream规则

    public class YourTest {
      @Rule
      public final TextFromStandardInputStream systemInMock
        = emptyStandardInputStream();
    
      @Test
      public void test() {
        systemInMock.provideText("first string\nsecond string");
        YourApp.main()
        ...
      }
    }