gpt4 book ai didi

c# - 在测试设置和拆卸中重定向 Console.Out

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:47 25 4
gpt4 key购买 nike

这是来自 Grabbing the output sent to Console.Out from within a unit test? 的跟进和 referenced article在 Mark Seemann 接受的答案中。

我想在测试时使用 Console.Out 和 Console.In 重定向流。类中的每个测试都需要使用重定向。

为了保持测试干净,我想在测试 SetUp 和 TearDown 中执行此操作。

这就是我的想法:

private StringWriter _sw;
private StringReader _sr;
[SetUp]
public void SetUp()
{
_sw = new StringWriter();
Console.SetOut(_sw);
_sr = new StringReader("100");
Console.SetIn(_sr);
}

[TearDown]
public void TearDown()
{
var standardOut = new StreamWriter(Console.OpenStandardOutput());
standardOut.AutoFlush = true;
Console.SetOut(standardOut);
Console.SetIn(new StreamReader(Console.OpenStandardInput()));
}

然后我会在测试中使用“_sw.ToString()”来验证写入流的内容。

为此使用设置或拆卸方法有什么主要缺点吗?这是否类似于使用 using 语句进行重定向?例如

using (StringWriter sw = new StringWriter())
{
...
}

最佳答案

Are there any major drawbacks of using setup or teardown methods for this?

是的,尽管它可能无法衡量。

此处描述了SetupTearDown 方法,每次测试都会创建两个新的一次性对象,但它们永远不会被丢弃。它们最终会超出范围并在垃圾收集器运行时被最终确定,但它可能以不太确定的方式发生。从理论上讲,与确定性地处理它们相比,它会使用更多的内存和处理器指令,但正如 Knuth 40 年前教导我们的那样,我们应该衡量而不是进行过早的优化。

我使用可变状态和 Implicit Setup 的主要问题Teardown 是它不是线程安全的,所以如果你想并行运行单元测试,你不能。

关于c# - 在测试设置和拆卸中重定向 Console.Out,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29267911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com