【发布时间】:2015-10-19 23:27:29
【问题描述】:
我发现我在 VS2013 中通过的一个测试在 VS2015 中失败了,该测试调用了一个服务,其中包括对 Console.Clear(); 的调用
为了了解发生了什么,我做了一个简单的单元测试
[TestMethod]
public void ExampleTest()
{
Console.Clear();
}
此测试在 Visual Studio 2013 中通过,但在 2015 年出现以下错误:
测试名称:ExampleTest 测试全名:solution.Common.Test.CacheManagerTest.ExampleTest 测试源:C:\solution.Common.Test\CacheManagerTest.cs:第 34 行 测试结果:失败 测试时间:0:00:00.3015003
结果 StackTrace:在 System.IO.__Error.WinIOError(Int32 errorCode, System.Console.GetBufferInfo(Boolean) 处的字符串可能全路径 throwOnNoConsole, Boolean& 成功)在 System.Console.Clear()
在 sol.Common.Test.CacheManagerTest.ExampleTest() 中 C:\solution.Common.Test\CacheManagerTest.cs:第 35 行结果消息:
测试方法 Alexandria.Common.Test.CacheManagerTest.ExampleTest 抛出 异常:System.IO.IOException:句柄无效。
我明白,如果我的服务没有被控制台调用,它会失败是一种糟糕的设计。我问这个问题的原因是为了理解为什么在新版本中失败了的 Visual Studio。这是预期的行为吗?发生了什么变化?
我在更改日志中没有看到任何与此相关的明显内容。
编辑:我从以下 dll 调用 Console.clear
Microsoft\Framework.NETFramework\v4.5.1\mscorlib.dll
编辑 2:
【问题讨论】:
-
不。对我来说,这在 Visual Studio 2010 上失败了。您能否再次检查 VS2013 右键单击您的项目,选择属性 -> 选择应用程序选项卡 -> 检查输出类型。是说类库吗?
-
@gideon 是的,它是一个类库 i.imgur.com/1Vedgyd.png 我正在使用 Microsoft Visual Studio Professional 2013 版本 12.0.31101.00 更新 4
-
哇,这很奇怪。它应该会中断,因为当它是类库时没有可用的控制台。是否有效,并清除控制台?
-
@mmilan 您在测试项目中使用什么“.net 框架”?在 '.net 4.5'
console.clear()使用Console.GetBufferInfo()而不是Console.GetBufferInfo(Boolean throwOnNoConsole, Boolean& succeeded)作为你的调用堆栈。 -
@gideon 我还没有找到一种方法来实际检查它是否确实清除了控制台。对我来说,在 Vs2013 中通过测试是没有意义的,但确实如此。
标签: c# .net visual-studio unit-testing visual-studio-2015