如何将控制台输出转换为字符串
本文关键字:转换 字符串 输出 控制台 | 更新日期: 2023-09-27 17:51:20
我正在制作一个非常简单的C#程序,用于输出文本并尝试对其进行测试。我的测试一直失败,因为控制台中的文本与我正在比较的文本不相等。我认为它只是没有正确地转换为字符串,但我不知道。这是程序代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lab3._1
{
public class ConsoleOutput
{
static void Main()
{
Console.WriteLine("Hello World!");
}
}
}
这是测试代码:
using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Lab3._1Test
{
[TestClass]
public class ConsoleOutputTest
{
[TestMethod]
public void WriteToConsoleTest()
{
var currentConsoleOut = Console.Out;
string newConsoleOut = currentConsoleOut.ToString();
string ConsoleOutput = "Hello World!";
Assert.AreEqual(newConsoleOut, ConsoleOutput);
}
}
}
这是我得到的错误:
Test Failed - WriteToConsoleTest
Message: Assert.AreEqual failed.
Expected:<System.IO.TextWriter+SyncTextWriter>.Actual:<Hello World!>.
您对如何设置控制台重定向、写入并读取结果有点困惑。为了实现您想要做的事情,请将您的测试方法更改为:
[TestMethod]
public void WriteToConsoleTest()
{
using (var sw = new StringWriter())
{
Console.SetOut(sw);
ConsoleOutput.Main();
Assert.AreEqual("Hello World!" + Environment.NewLine, sw.toString());
}
}
您的测试从不调用ConsoleOutput.Main
,因此Hello World!
永远不会写入控制台。然后,您在TextWriter
上调用ToString
,并将其与string
进行比较,因此您正在比较苹果和橙子。
如果您想捕获写入控制台的内容,您应该将其重定向到另一个TextWriter
实现:
[TestMethod]
public void WriteToConsoleTest()
{
// setup test - redirect Console.Out
var sw = new StringWriter();
Console.SetOut(sw);
// exercise system under test
ConsoleOutput.Main();
// verify
Assert.AreEqual("Hello World!'r'n", sw.ToString());
}