我有一个类,它使用Console
类,并在构造函数中设置此变量。
public Scene() {
Height = Console.WindowHeight;
Width = Console.WindowWidth;
}
和测试类,用于测试此构造函数:
public class SceneTests {
[Fact]
public void Contructor_None_ShouldReturnScene() {
var testScene = new Scene();
Assert.Equal(Console.WindowHeight, testScene.Height);
Assert.Equal(Console.WindowWidth, testScene.Width);
}
}
但是在运行此测试时,我得到了Exeption:
Exception has occurred: CLR/System.IO.IOException
An exception of type 'System.IO.IOException' occurred in System.Console.dll but was not handled in user code: 'Nieprawidłowe dojście'
at System.ConsolePal.GetBufferInfo(Boolean throwOnNoConsole, Boolean& succeeded)
at System.ConsolePal.get_WindowHeight()
at System.Console.get_WindowHeight()
我猜是因为我没有实际的Console
窗口。
我可以以某种方式模拟吗?也许简单地手动创建缓冲区并将其添加到Console
就可以解决问题。
答案 0 :(得分:5)
以通常的方式...
创建一个描述您对控制台的访问的界面。在只使用System.Console的类中实现该接口。使用您最喜欢的“依赖注入”机制将其注入正在运行的代码中。
然后创建另一个在测试期间使用的类,该类实现相同的接口,但不使用System.Console类(例如,简单地硬编码WindowHeight和WindowWidth属性,让Console.ReadLine始终返回相同的字符串, Console.Write或WriteLine到其他地方)。将该类注入单元测试代码中。