MSTest:.testsettings 并不总是部署文件

MSTest: .testsettings is not always deploying files

我们有一个解决方案,其中包含一系列用于我们测试的项目。其中一个项目包含一组测试所需的文件。这些文件是将在每次调用 API 路由时进行验证的模式。测试自然会调用一个或多个 API 路由。

解决方案有一个 .testsettings 文件。该文件启用了部署,并指定需要部署这些模式。此外,每个模式文件都设置为“始终复制”。还。 .testsettings 文件在解决方案中,在解决方案项下。

问题是 .testsettings 文件只是偶尔受到尊重。有时文件被复制;有时他们不是。当他们不抄袭时,我们可以通过以下方式解决:

这通常至少有效一次。但不可避免地,它会停止工作并且不会再次部署文件。

请注意,当您转到“测试”->“测试设置”菜单时,我们当前的 .testsettings 文件始终处于选中状态。所以选择一个新的 .testsettings 文件就意味着选择 UI 已经说过的文件。

我们考虑过 DeploymentItem 路线,但出于两个原因,围绕代码维护,这是不切实际的。

  1. 据我所知,DeploymentItem 只能放在个别测试上。有了数百个测试,我们会无处不在。这将成为代码维护的噩梦。我想把它放在全局 TestInitialize 方法上,但是每次测试 运行 时都会重新复制文件,这似乎没有必要。更不用说我必须在方法上放置几十个 DeploymentItem 属性,并且每次添加新模式时我们都需要保持最新。
  2. 与此相关,添加新模式意味着在必要时更改现有测试。同样,我们有数百个测试。

一个更好的解决方案是将文件复制一次,然后在需要时让代码在公共模式池中查找。

我也考虑过将 .testsettings 替换为 .运行settings,但它似乎在 XML 中没有 DeploymentEnabled 节点,并且该选项存在的地方是再次特定于 DeploymentEnabled.

有没有人对此有解决方案,或者有人知道这是否是一个已知错误?模式验证发生在幕后——各个测试作者不必显式调用它——如果它没有发生,它不会使测试失败(我们并不总是为每个 API 调用,所以如果是这种情况,我们不想让测试失败)。因此,通常很难立即确定是否进行了验证。正因为如此,我们有时会在模式实际损坏的测试中得到错误的通过,这都是因为 .testsettings 文件并没有像它设置的那样实际部署我们的文件。

所以我发现了问题:显然这个问题已在 Visual Studio 2015 Update 3 中修复。我们使用的是 Update 2。一旦我们获得新的更新,这个问题就消失了。