c# - 如何:通过控制台捕获 void 方法的输出?
问题描述
我正在为质数程序编写一个测试用例。我正在尝试将我的PrimeEvaluator
方法的输出与我的expectedFactors1
字符串进行比较。PrimeEvaluator
是一个空白,所以这就是我试图从控制台读取输出的原因。
public void PrimeTest()
{
//arange
int number = 738;
string expectedFactors1 = "2,3,3,41";
string actual;
//act
Primes.Program.PrimeEvaluator( number);
actual = Console.ReadLine();
//assert
Assert.AreEqual(expectedFactors1,actual);
}
当我运行我的单元测试时,什么也没有发生。我知道这可能是错误的,但是有人可以给我一些关于如何从中捕获数字输出的见解PrimeEvaluator
吗?
解决方案
在这种特殊情况下,您可以利用Console.Out
usingConsole.SetOut()
拦截写入的内容。
public void PrimeTest() {
//stream and writer used to intercept console output
using(var memoryStream = new MemoryStream()) {
var writer = new StreamWriter(memoryStream);
Console.SetOut(writer);
//Arrange
int number = 738;
string expectedFactors1 = "2, 3, 3, 41";
//Act
Primes.Program.PrimeEvaluator(number);
//Assert
memoryStream.Position = 0; //reset position to read stream
string actual = new StreamReader(memoryStream).ReadToEnd();
Assert.AreEqual(expectedFactors1, actual);
}
}
推荐阅读
- spring - 弹簧 JDBC 模板。空指针异常
- jquery - pdfmake中未显示页脚
- ruby-on-rails - Rails 5 + Shrine + 多态模型 + 漂亮的位置
- javascript - 如何用 JS 编码
- python-2.7 - 将子进程的输出写入文本文件
- javascript - 从 webview 导航到 react native 页面
- python - Python:+=静态方法中的奇怪行为
- flutter - Flutter:有没有办法用英文打开键盘?
- qt - 如何在 qt 快速应用程序中在 PieSlice 和 BarSet 的中心显示文本?
- android - Expo Camera recordAsync 承诺未解决