无法对测试运行进行排队[...]测试运行部署问题:文件或目录[..]的位置不受信任

时间:2010-02-02 20:50:54

标签: .net unit-testing testing deployment

我正在使用VB.NET 2008,NHibernate,FluentNHibernate和Linq for NHibernate开发样本订单管理解决方案。

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

  

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

我对NHibernate.Linq.dll

也一样
  

无法对测试运行进行排队[...]测试运行部署问题:文件或目录“C:\ Open \ Projects \ Examples [..] \ NHibernate.Linq.dll”的位置不受信任。< / p>

两个程序集都引用到我的测试项目中。只有当我试图对我的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资源管理器解锁后,这可能会允许部署这些文件为了执行测试。因此,我一直有这个错误,我的测试不会启动。

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

转发回答并详细阐述。

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

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

第二个你输入执行以下操作之一的代码,你可能会遇到问题:

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

例如,如果出现以下情况:

  • 您在自己的机器上运行单元测试,但在家里?您是否可以访问相同的系统?
  • 数据库更改?
  • 将数据库移动到其他服务器以释放空间吗?
  • 磁盘已满?
  • 网络已经关闭,或者有网络攻击?

所有这些以及其他数百件事将导致您的单元测试失败,因为您不仅要测试位于这些连接路径另一端的逻辑,还要测试连接路径是否正常工作

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

当测试失败时,你总是想说“好吧,我们必须做些什么来打破代码”。你永远不想听到这个“唉,这个测试总是失败,只要离开它,它可能再次成为服务器”。

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

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

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

例如:

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

对于数据库和Web服务器等,您可以做同样的事情。

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

答案 1 :(得分:1)

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

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