我一直在学习测试驱动开发(使用JUnit),我对如何测试空方法有疑问,在这种情况下,我不能直接在方法的返回值上使用assertTrue()之类的东西。例如,假设我有一个简单的基于控制台的应用程序,它的一部分在屏幕上打印菜单,比如使用以下方法:
public void printMenu()
{
System.out.println("Menu:");
System.out.println("1. Option ONE");
System.out.println("2. Option TWO");
System.out.println("3. Exit");
}我的问题是,我真的需要测试这个方法吗?如果是这样,我应该怎么做呢?
发布于 2010-08-04 21:34:16
首先:测试UI很难。有些人不会费心测试这样的东西,因为很难写出有意义的测试,而不是脆弱到无用的地步。我不会费心去测试这个方法。
但是:
如果你想测试菜单生成,因为你的菜单代码很复杂,你需要一些方法来确保它工作,你有几个选择。
发布于 2010-08-04 21:32:43
很难对依赖于静态方法调用的方法进行单元测试。这不是返回某些东西或void的问题。你可以做的是将打印抽象到一个接口中,并让你的类依赖于这个接口(例如使用构造函数注入):
private SomePrinterInterface _printer;
public void printMenu()
{
_printer.println("Menu:");
_printer.println("1. Option ONE");
_printer.println("2. Option TWO");
_printer.println("3. Exit");
}在您的单元测试中,您可以模拟接口并验证是否在其上调用了正确的方法。这样,您就可以在中独立测试printMenu。
发布于 2010-08-04 21:31:39
捕获控制台输出并与预期结果进行比较
https://stackoverflow.com/questions/3405955
复制相似问题