【问题标题】:Unit Testing for user inputs - Java用户输入的单元测试 - Java
【发布时间】:2010-11-19 23:58:25
【问题描述】:

我正在尝试为我创建的游戏编写单元测试。 该游戏是一个井字游戏实现,它与用户交互并从命令行获取输入。 我不确定如何编写一个测试并检查用户输入。 例如: 运行时:程序要求用户输入姓名和他的符号('x' 或 '0') 然后继续接受位置输入。

我是否创建一个@Before 方法并在该方法中编写输入语句?还是有更好的方法来做到这一点? 在我的 @Before 方法中编写所有内容会使其变得非常大。

有什么建议吗??请帮忙。

谢谢

【问题讨论】:

    标签: java unit-testing junit


    【解决方案1】:

    理想情况下,您可以将输入类拆分为一个接口和一个实现,然后创建一个 MockInput 用于测试目的。

    interface IUserInput {
      public String getUserName();
      public XO_Enum getUserSymbol();
    }
    
    class MockUserInput implements IUserInput {
        private XO_Enum xo;
        private String name;
        public MockUserInput(String name_, XO_Enum xo_) {
          xo = xo_;
          name = name_;
        }
        public String getUserName() { return name; }
        public XO_Enum getUserSymbol() { return xo; }
    }
    

    当某些测试需要虚假的用户输入时,您只需为该场合制作一个模拟的并继续进行。符号和名称可以是硬编码的,但这种方式会给您一些灵活性。

    鉴于 hhafez 的回答,我们中的一个人显然回答了错误的问题......我不太确定是他。嗯,不管怎样,这都会有所帮助。

    【讨论】:

      【解决方案2】:

      你说你要写

      将接受并检查用户输入的测试

      你不应该有一个类同时做,接受和检查用户输入,那是很差的凝聚力。 取而代之的是两个类,一个 Validator(或 checker 或任何你想调用它的东西)和一个输入处理器,它接受用户输入并构建一些 Validator 可以理解的对象。

      一旦您分离了关注点,为您的验证器编写一个 junit 测试用例应该非常简单。至于用户输入类看看这个问题about how to unit test console based app

      【讨论】:

      • 谢谢。我为两者创建了一个单独的类。我将创建一个模拟对象来测试它。非常感谢:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 2014-06-01
      相关资源
      最近更新 更多