【问题标题】:NUnit Test - Looping - C#NUnit 测试 - 循环 - C#
【发布时间】:2012-02-16 05:07:28
【问题描述】:

我是 TDD 新手,正在尝试解决问题。

在我的任务中,我必须从控制台读取一堆字符串并将它们添加到字符串类型列表中。在我的测试方法中,我编写了一个 for 循环来读取字符串并传递给要添加的方法。我不知道如何测试这个过程,有点困惑。任何帮助将不胜感激。谢谢。

在测试方法中循环。

   for(int i=0;i<robot.noOfCommands;i++)
        {
            robot.readCommand(Console.ReadLine());

        } 

我正在用 C#.Net 编写代码

【问题讨论】:

  • 你想测试什么?列表中的字符串数量,字符串中的数据还是什么?
  • 字符串个数和字符串中的数据

标签: c# visual-studio-2010 unit-testing tdd nunit


【解决方案1】:

单元测试不应该需要人工交互,因此使用 Console.ReadLine() 是一个主要的禁忌。

您可能想要的是为您的robot 对象提供一些预定义的输入。然后你可以测试(Assert),结果是你所期望的。这就是单元测试的精髓。

【讨论】:

    【解决方案2】:

    为了让您的测试正常工作,您需要伪造对外部服务的依赖,在本例中为System.Console。您要测试(或类)的方法需要能够提供不同类型的这种依赖关系——这样伪造的也可以工作。

    有了Console.ReadLine,你真正需要的是TextReader。您的循环方法可能如下所示:

    public void MyMethod(TextReader reader)
    {
        for (int i = 0; i < robot.noOfCommands; i++)
        {
            robot.readCommand(reader.ReadLine());
        }
    }
    

    在实际应用中,您将使用MyMethod(Console.In) 调用它。在测试中,您可以使用预定义的命令准备假阅读器(例如从资源文件中读取)。

    【讨论】:

    • +1 是一种非常简单的伪造控制台的方法!我以前从来没有想过这个。从现在开始,我将在所有测试中都这样做。
    • 这是使控制台输入可测试的绝佳解决方案!
    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 2020-11-23
    • 2017-11-30
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多