我正在制作一个非常简单的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!>.
答案 0 :(得分:2)
你对如何设置控制台重定向,写入然后读取结果有点困惑。要实现您要执行的操作,请将测试方法更改为:
[TestMethod]
public void WriteToConsoleTest()
{
using (var sw = new StringWriter())
{
Console.SetOut(sw);
ConsoleOutput.Main();
Assert.AreEqual("Hello World!" + Environment.NewLine, sw.toString());
}
}
答案 1 :(得分:1)
您的测试从不调用ConsoleOutput.Main
,因此永远不会将Hello World!
写入控制台。然后,您在ToString
上调用TextWriter
并将其与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());
}