2010-11-19 69 views
1

我正在尝试为我创建的游戏编写单元测试。 游戏是一个tic tac脚趾实现,它与用户交互并从命令行获取输入。 我不知道我该如何去编写一个测试,将采取和检查用户输入。 例如: 运行时:程序要求用户输入名称及其符号('x'或'0') ,然后继续接受位置输入。用户输入的单元测试 - Java

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

有什么建议?请帮忙。

谢谢

回答

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的回答,我们中的一个明显回答了错误的问题......我不确定这是他。嗯,这会有所帮助。

+0

谢谢。都有所帮助。 :) – JJunior 2010-11-20 00:49:35

1

你说你想写

一个测试,将采取并检查用户输入

你不应该有一个类,确实都拿出来,检查用户输入,这是很差的凝聚力。 取而代之的是有两个类:一个Validator(或者检查器或者你想要调用它的东西)和一个输入处理器,它接受用户输入并构建Validator可以理解的一些对象。

将问题分开后,为您的Validator编写junit测试用例应该非常简单。至于用户输入类有看看这个问题about how to unit test console based app

+0

谢谢。我为两者创建了一个单独的课程。我将创建一个模拟对象来测试它。非常感谢:) – JJunior 2010-11-20 00:50:27