testing - 测试驱动开发 : Void methods

标签 testing junit tdd

我一直在学习 TDD(使用 JUnit),我对如何测试 void 方法有疑问,在这种情况下我不能直接对方法的返回值使用 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");
}

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

最佳答案

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

private SomePrinterInterface _printer;

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

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

关于testing - 测试驱动开发 : Void methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3405955/

相关文章:

unit-testing - 使用 Jest 测试 Realm react-native

c# - 关于 Appium 的问题

spring - 使用mockmvc和junit添加csrf token

java - Mockito 显示与 mock 的交互为 0

testing - 如何在 webpack 中集成 karma

ruby-on-rails - 如何使用 DCI 模式测试行为?

reactjs - 使用 Jest with Enzyme 的 Typescript 测试无法识别组件

Django 测试总是返回 301

ruby-on-rails - Ruby on Rails - 访问 :has_many => :through association 中的数据

java - 编写 JPA 存储库 JUnit,其中一个存储库依赖于其他存储库