首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试驱动开发: Void方法

测试驱动开发: Void方法
EN

Stack Overflow用户
提问于 2010-08-04 21:27:59
回答 4查看 1.8K关注 0票数 4

我一直在学习测试驱动开发(使用JUnit),我对如何测试空方法有疑问,在这种情况下,我不能直接在方法的返回值上使用assertTrue()之类的东西。例如,假设我有一个简单的基于控制台的应用程序,它的一部分在屏幕上打印菜单,比如使用以下方法:

代码语言:javascript
复制
public void printMenu()
{
   System.out.println("Menu:");
   System.out.println("1. Option ONE");
   System.out.println("2. Option TWO");
   System.out.println("3. Exit");
}

我的问题是,我真的需要测试这个方法吗?如果是这样,我应该怎么做呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-04 21:34:16

首先:测试UI很难。有些人不会费心测试这样的东西,因为很难写出有意义的测试,而不是脆弱到无用的地步。我不会费心去测试这个方法。

但是:

如果你想测试菜单生成,因为你的菜单代码很复杂,你需要一些方法来确保它工作,你有几个选择。

  1. 重构您的方法,使其接受输出流作为参数,然后传入您可以检查其内容的输出流。你也可以通过重定向System.out来实现这一点。
  2. 重构了你的方法,以便将菜单生成为一堆对象,然后单独打印。您可以检查和验证这些对象。
票数 2
EN

Stack Overflow用户

发布于 2010-08-04 21:32:43

很难对依赖于静态方法调用的方法进行单元测试。这不是返回某些东西或void的问题。你可以做的是将打印抽象到一个接口中,并让你的类依赖于这个接口(例如使用构造函数注入):

代码语言:javascript
复制
private SomePrinterInterface _printer;

public void printMenu()
{
   _printer.println("Menu:");
   _printer.println("1. Option ONE");
   _printer.println("2. Option TWO");
   _printer.println("3. Exit");
}

在您的单元测试中,您可以模拟接口并验证是否在其上调用了正确的方法。这样,您就可以在中独立测试printMenu。

票数 3
EN

Stack Overflow用户

发布于 2010-08-04 21:31:39

捕获控制台输出并与预期结果进行比较

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3405955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档