【问题标题】:Failed to queue test run [...] Test run Deployment issue: The location of the file or directory [..] is not trusted未能将测试运行排队 [...] 测试运行部署问题:文件或目录的位置 [..] 不受信任
【发布时间】:2011-01-12 08:31:47
【问题描述】:

我目前正在使用 VB.NET 2008、NHibernate、FluentNHibernate 和 Linq for NHibernate 开发示例订单管理解决方案。

在运行时,我收到以下错误:

无法将测试运行排队 [...] 测试运行部署问题:文件或目录“C:\Open\Projects\Examples[..]\FluentNHibernate.dll”的位置不受信任。

NHibernate.Linq.dll 也一样

无法将测试运行排队 [...] 测试运行部署问题:文件或目录 'C:\Open\Projects\Examples[..]\NHibernate.Linq.dll' 的位置不受信任。

这两个程序集都被引用到我的测试项目中。只有在尝试对我的 DAL 进行单元测试时,它才开始出现这些棘手的错误。

我读过一些关于跑步的文章
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\caspol -machine -addgroup All_Code -url file://comdumap:/* FullTrust -n DevelopmentMappedDrive"
(它是法语的,但实际上只有几句话很容易用 Google 语言工具翻译。)

如有必要,我可能会为您提供任何其他有用的详细信息。我不太清楚有什么用处,所以我更愿意等待您的询问(如果有的话)。

编辑 1:我发现另一个参考说明了这样的错误解决方案:Test Run Deployment Issue
似乎在通过 Windows 资源管理器解除阻止后,这可能允许部署这些文件以便执行测试。因此,我一直有这个错误,我的测试不会启动。

感谢您的帮助!

【问题讨论】:

  • 您正在运行的单元测试代码由于不受信任的位置而失败,这表明您没有在进行单元测试,而是在进行集成测试。这很脆弱并且容易出现其他问题,所以我会尽量避免这样做。
  • +1 供您发表评论。尽管如此,我还是希望听到更多关于单元测试的信息。我打算通过示例阅读测试驱动开发(ISBN-13:978-0-321-14653-3,ISBN-10:0-321-14653-0)。但从现在到我能够阅读它的时间可能会有很大不同。对这个话题有一些了解会很棒。感谢您的评论,我现在更好地理解了集成测试是什么,但是我对单元测试越来越模糊了。=P
  • @Lasse V. Karlsen:您能否发表您的评论作为答案,以便我将其标记为我的问题的答案?尽管我找到了问题的解决方案,但我更喜欢你的回答。

标签: .net unit-testing testing deployment


【解决方案1】:

作为答案转发并详细说明。

您正在运行的单元测试代码由于不受信任的位置而失败,这表明您不是在进行单元测试,而是在进行集成测试。这很脆弱并且容易出现其他问题,所以我会尽量避免这样做。

单元测试应该测试小块逻辑、代码单元,如类、方法等。

当您第二次引入执行以下操作之一的代码时,您可能会遇到问题:

  • 需要数据库的代码
  • 需要文件(或文件访问)的代码
  • 与某些外部系统(如 COM 对象、Web 服务、网络上的任何东西)对话的代码

例如,如果:

  • 您在自己的机器上运行单元测试,但在家里?您是否可以访问相同的系统?
  • 数据库发生变化?
  • 数据库已移至其他服务器以释放一些空间?
  • 磁盘已满?
  • 网络中断,或出现故障?

所有这些以及数百种情况都会导致您的单元测试失败,因为您不仅要测试位于这些连接路径另一端的逻辑,而且还要测试连接路径是否有效.

这会导致您的测试变得脆弱,并且容易出错。

当测试失败时,您总是想说“好的,我们一定做了一些事情来破坏代码”。你永远不想听到这种“啊,这个测试总是失败,别管它,它可能又是服务器了”。

与您的问题相关的单元测试失败的原因是,由于代码需要与外部系统(文件、数据库、Web 服务器、网络设备)通信,因此需要提高信任度。如果它只运行普通代码,它不需要提升信任,所以你的问题是你有这样的测试的一个死的赠品。

这些测试称为集成测试,因为它们不仅测试代码,还测试您的代码与外部世界的集成程度。

我会尝试删除测试的那些部分,也许通过重构它们,以便您可以在单元测试中用测试系统替换它们。

例如:

  • 如果您的代码需要写入文件,请将写入文件的代码分离到一个新类中,在WriteToFile 之类的方法中,将类包装在接口中,并将对象交给逻辑代码作为参数。然后,在您的单元测试中,创建一个实现相同接口的新类,但它只记录该方法被调用,而不是尝试将任何内容写入文件。这样您就可以测试“应该写入文件的方法实际上是使用正确的数据调用的”,而不是“文件已成功写入”。

对于数据库和网络服务器和类似的,你可以做同样的事情。

最后,请注意,当然在某些时候您可能希望实际运行测试以确保文件最终最终在磁盘上。但是,您应该将所有这些测试分开到他们自己的项目中,这样如果它们发生故障,您就知道这是一个集成测试,所有单元测试都应该能够正常运行。

【讨论】:

  • +1 +solution-answer。感谢@Lasse V. Karlsen 提供的这些精确度。因此,对于那些有同样问题的人,我的答案中引用的链接工作正常,这正是我的情况。尽管如此,我更喜欢@Lasse V. Karlsen 的回答,因为 Windows 认为我的 DLL 就好像它们在网络上一样。因此,当这种情况发生时,请考虑 @Lassen V. Karlsen 写的关于单元测试的内容。
【解决方案2】:

我按照this solution中的步骤成功部署了测试运行。

仔细阅读您的文件或目录路径,因为我自己弄错了,并认为此解决方案不适用于我的情况。

【讨论】:

  • 感谢您直截了当。这正是我的问题,我正在编写测试以确保我的所有 Ninject 模块都正常工作并且 Ninject Dll 被阻止。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 2023-02-14
  • 2011-05-06
  • 2014-06-21
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多