【问题标题】:Adding a command line input for testing a method in C#在 C# 中添加用于测试方法的命令行输入
【发布时间】:2013-11-09 19:06:05
【问题描述】:

我正在 C# 控制台应用程序中编写程序,并且在某些方法中我有 Console.ReadLine() 和 Console.WriteLine()。我想知道如何在测试用例中提供输入。

例子:

        Console.WriteLine("Enter account number: ");
        accountNumber = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Enter name: ");
        cStringName = Convert.ToString(Console.ReadLine());
        name = cStringName;
        Console.WriteLine("Enter balance: ");
        balance = Convert.ToDouble(Console.ReadLine());

        Console.WriteLine("Enter Date: ");
        dateCreated = Convert.ToString(Console.ReadLine());

所以基本上该方法返回一个布尔值,说明是否创建了帐户。在我的测试用例中,我希望能够调用此方法,但为了执行它,我需要设置 accountNumber、name、balance 和 date。有没有办法做到这一点?或者只是向方法添加参数的最佳方法(我不想这样做)?

【问题讨论】:

  • 为什么不添加参数?确定是否应该创建帐户的方法不应该知道也不关心数据来自哪里,因此不应该与命令行绑定。您提出测试策略时遇到的问题是一个明确的迹象。

标签: c# unit-testing console-application readline


【解决方案1】:

重写该方法,使其接受一对Stream 作为参数。然后在实际程序中调用时,传入Console.OutConsole.In作为参数。从您的测试用例调用时,请改为发送一些内存流。

当编写这种方法并且你想测试它们时,它们不应该直接依赖于控制台,而应该依赖于抽象流。然后,您使用 依赖注入(例如,将流作为参数传递)以便能够在测试时将控制台替换为内存流。

【讨论】:

    猜你喜欢
    • 2016-08-29
    • 2018-08-15
    • 2019-06-08
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多