小编Fre*_*ver的帖子

Visual Studio 2015或2017不会发现单元测试

编辑2016-10-19:

最初的问题是关于VS2015 CTP6与XUnit测试运行器特有的问题.从答案中可以清楚地看出,Visual Studio中的单元测试发现存在更广泛的问题,这可能在许多不同的情况下发生.我已经清理了我的问题以反映这一点.

我还在我自己的答案中加入了一个脚本,我今天仍然使用它来解决类似的问题.

许多其他答案也证明有助于更好地理解VS测试运行器的复杂性.我感谢人们仍在分享他们的解决方案!


原始问题2015-04-10:

从昨天开始,我的Visual Studio Test Explorer将不会发现任何项目的测试.建筑后也没有显示绿色装载栏.

当我转到Visual Studio Test Explorer并单击"全部运行",或者当我右键单击任何测试方法并选择"运行测试"时,我在输出窗口中得到以下内容:

Could not load file or assembly 'Microsoft.VisualStudio.Web.ProjectSystem, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

我在Windows 10 Pro Technical Preview上运行Visual Studio 2015 CTP 6,构建10041. .NET Framework版本似乎并不重要 - 它发生在4.0,4.5.24.6.

我尝试使用以下测试框架,所有这些都给出了相同的行为:

  • Microsoft.VisualStudio.QualityTools.UnitTestFramework v14.0.22609.0
  • xunit v2.1.0-beta1-build2945xunit.runner.visualstudio v2.1.0-beta1-build1051
  • NUnit v2.6.4NUnitTestAdapter v2.0.0

我在GitHub(xunit)上发现了一个类似的问题:无法通过xunit团队的评论发现测试#295:

请注意,据报道,Visual Studio 2015 CTP 5被一般的单元测试(不仅仅是xUnit.net)打破了,所以不要指望它可以工作.

此外,请确保您已清理Visual …

unit-testing xunit test-runner visual-studio-2015 visual-studio-2017

158
推荐指数
13
解决办法
11万
查看次数

自Spectre和Meltdown以来如何在JavaScript中获得微秒时序

情况

在编写高性能JavaScript代码时,Chrome等人提供的标准分析工具并不总是足够的.它们似乎只提供功能级粒度,向下钻取并找到我需要的信息可能非常耗时.

在.NET中,StopWatch该类给出了我所需要的:任意代码段的亚微秒分辨率计时.

对于performance.now()曾经是衡量性能的好方法,但是为了响应Spectre和Meltdown,所有主流浏览器都将分辨率降低到甚至不到一毫秒.

performance.now()上引用MDN :

时间戳实际上不是高分辨率.为了缓解诸如Spectre之类的安全威胁,浏览器目前对结果进行不同程度的舍入.(Firefox在Firefox 59中开始四舍五入到2毫秒.)有些浏览器也可能会略微随机化时间戳.在未来的版本中,精度可能会再次提高; 浏览器开发人员仍在调查这些时间攻击以及如何最好地缓解它们.

问题

我需要微秒精度计时.在撰写本文时,浏览器似乎没有提供任何选项或标志来禁用这些安全性测量.也许我在谷歌搜索错误的条款,但我遇到的唯一文章是安全问题的解释以及这些缓解如何解决它们.

我对这里的安全方面不感兴趣 - 我在我自己的机器上对性能关键的JavaScript代码进行基准测试,我唯一关心的是尽可能少的努力获得尽可能准确的测量.

现有的解决方法

我想到两个选择:

  1. 安装未实现这些缓解的旧版浏览器

我必须将旧版本的FireFox用于基准测试,并将新版Chrome浏览器用于浏览.这是不切实际的,因为我需要在所有浏览器中进行测试(最好还是在所有浏览器中进行测试).此外,旧的浏览器中没有实现新的优化,因此基准测试可能无用.

  1. 使用WebWorkers实现自定义计时器

我已经看过各种较老的博客文章,但它们似乎都没有达到我所需要的高精度(毕竟,过去曾经有performance.now()过).

这个问题

如何在performance.now()不必使用旧浏览器版本,虚拟机等的情况下获得有效的前幽灵?

JavaScript中是否有任何编码技术或库可以实现微秒精度?

上述3个浏览器是否有禁用这些安全措施的选项或标志?

我最终寻找一种方式来精确测量不同的代码片段进行相互比较的相对性能-所以如果有,让我蜱,而不是微秒的解决方案,这将是可以接受的过,只要它是准确和适用于浏览器.

javascript performance benchmarking

7
推荐指数
2
解决办法
848
查看次数