C# 在一个简单的测试代码中发生了什么
我有以下几行代码,并在Microsoft文档中查找了方法和对象定义,但我仍然不理解它是如何工作的C# 在一个简单的测试代码中发生了什么,c#,C#,我有以下几行代码,并在Microsoft文档中查找了方法和对象定义,但我仍然不理解它是如何工作的 using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace HelloWorld.Tests { [TestClass] public class WhenProgramRuns { private string _consoleOutput; [Te
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace HelloWorld.Tests
{
[TestClass]
public class WhenProgramRuns
{
private string _consoleOutput;
[TestInitialize]
public void Initialize()
{
var w = new System.IO.StringWriter();
Console.SetOut(w);
Program.Main(new string[0]);
_consoleOutput = w.GetStringBuilder().ToString().Trim();
}
[TestMethod]
public void SayHelloWorld()
{
Assert.AreEqual("Hello, World", _consoleOutput);
}
}
}
我不明白“w”将如何捕获Main执行的结果,以及为什么代码作者在调用Main时传递字符串[0]
主要内容如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloWorld
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello, World");
}
}
}
Console.SetOut函数将标准输出从控制台重定向到“w”。好吧,让我们把它分成几部分: 我不明白“w”将如何捕捉执行结果 主要的 从技术上讲,说它将捕获执行结果是不正确的。我们的
w
是StringWriter
的一个实例。
StringWriter
实现将信息写入字符串的TextWriter
控制台将使用此w
实例写入输出数据
以及为什么代码作者在调用Main时传递字符串[0]
main方法接受string[]
作为参数,因此为了调用它,我们必须传递一些东西,并且因为我们以后并不真正需要这个参数,所以传递一个空数组就可以了
执行逻辑可以描述为:
StringWriter
StringWriter
输出数据string[]运行Main方法的唯一重载
StringWriter
上的GetStringBuilder()
获取生成器,并通过调用ToString()
你需要花一些时间研究控制台应用程序的入口点是如何工作的,
out
关键字是如何工作的`以及参数传递是如何工作的。投票结束时选择“太宽”,当然这是一个简短的程序,但是StackOverflow不是私人教练/教育服务。@DavidL这里没有使用out
关键字。@Servy是的,你说得很对,谢谢。在编辑计时器过期后,事后才意识到这一点。我认为其他两点仍然有效。@DavidL确实有效。这是一个正确问题的正确答案。提问者可能不知道流、方法参数和有机西瓜之间的区别。这个问题在这里很难回答。