Testing 测试驱动开发:Void方法
我一直在学习TDD(使用JUnit),我对如何测试void方法有疑问,在这种情况下,我不能直接在方法的返回值上使用assertTrue()之类的东西。。例如,假设我有一个简单的基于控制台的应用程序,其中一部分在屏幕上打印菜单,比如使用以下方法:Testing 测试驱动开发:Void方法,testing,junit,tdd,Testing,Junit,Tdd,我一直在学习TDD(使用JUnit),我对如何测试void方法有疑问,在这种情况下,我不能直接在方法的返回值上使用assertTrue()之类的东西。。例如,假设我有一个简单的基于控制台的应用程序,其中一部分在屏幕上打印菜单,比如使用以下方法: public void printMenu() { System.out.println("Menu:"); System.out.println("1. Option ONE"); System.out.println("2. Opt
public void printMenu()
{
System.out.println("Menu:");
System.out.println("1. Option ONE");
System.out.println("2. Option TWO");
System.out.println("3. Exit");
}
我的问题是,我真的必须测试这个方法吗??如果是这样,我该怎么做 捕获控制台输出并与预期进行比较很难对依赖于静态方法调用的方法进行单元测试。这不是返回某物或作废的问题。您可以做的是将打印抽象到接口中,并使您的类依赖于此接口(例如使用构造函数注入):
在单元测试中,您可以模拟接口并验证是否对其调用了正确的方法。这样,您就可以独立地测试printMenu。您不能对该方法进行单元测试 此方法不需要单元测试所需的逻辑或处理
如果需要对打印菜单进行单元测试,可以考虑将结果输出到文本文件。
然后读取文本文件并比较菜单文本。首先:测试UI很难。有些人不想费心测试这样的东西,因为很难编写没有脆弱到无用点的有意义的测试。我不会费心去测试这个方法 但是: 如果您想测试菜单生成,因为您的菜单代码很复杂,并且您需要确保它工作的方法,那么您有两个选择
private SomePrinterInterface _printer;
public void printMenu()
{
_printer.println("Menu:");
_printer.println("1. Option ONE");
_printer.println("2. Option TWO");
_printer.println("3. Exit");
}