WebApi控制器线程中的控制台输出消失

时间:2018-07-13 19:13:57

标签: c# asp.net-web-api cucumber black-box-testing

此问题的完整上下文如下:

  • SpecFlow(黄瓜)方案在NUnit测试运行程序下运行
  • WebApi应用程序通过Owin在SpecFlow功能持续时间内启动

目的是“黑匣子”测试系统(Web应用程序)的功能,其中被测系统将向外部站点发出http请求。为了进行测试,我们选择Owin / WebApi作为模拟外部站点的最便捷方法。

  • 测试代码(一个SpecFlow步骤)启动一个WebApi应用程序以模拟外部站点。
  • 测试代码(进一步的步骤)将Web请求发布到被测系统;在已知的时候,被测系统会向外部站点(我们的模拟站点)发出http请求
  • 我们的模拟响应测试中规定的请求
  • 测试代码在处理来自模拟程序的响应时会评估被测系统的行为
  • 此功能结束时,不再需要模拟WebApi应用程序,该应用程序已关闭。

请注意,所有SpecFlow代码(功能和步骤代码,包括Owin WebApi应用程序模拟)都在一个进程中执行;除了WebApi控制器方法之外的所有其他东西都在一个线程中执行。

步骤代码出于诊断目的进行Console.WriteLine调用;就像WebApi控制器一样。

问题是,并非WebApi控制器中的所有Console.WriteLine都出现在最终测试输出中。

  • 似乎只捕获了第一个执行的场景的WriteLine输出;在所有其他情况下,WebApi控制器的WriteLine输出都会消失。
  • 主测试线程的控制台输出似乎不受影响-全部存在;仅WebApi控制器线程的输出似乎受到影响。
  • 运行不同组的方案表明该问题与方案本身无关,仅是“执行顺序”,即只有第一个执行的方案可以正常工作。
  • 调试显示所有预期的Console.WriteLine调用都已完成;出于某种原因,输出消失了。
  • 直接访问基础TextWriter并在每次写入后执行刷新无济于事。

这个问题的可能原因(WebApi vs NUnit vs SpecFlow)尚不清楚,但似乎在第一种情况完成后,WebApi控制器/线程的“标准输出”似乎正在发生变化(可能是重定向)

在WebApi / Owin或NUnit中使用标准输出/控制台输出时是否存在任何已知问题,可能会解决观察到的问题?如果是,是否有任何解决方案或解决方法?

0 个答案:

没有答案