在我的项目中,我使用Microsoft的单元测试框架编写测试。当我从Visual Studio运行它们时,我的所有测试都通过了,但是当我从MSBuild运行测试时,所有测试都失败并显示以下erorr消息:
单元测试适配器引发异常:未解析成员SomeType,SomeAssembly Version = assemblyVersion,Culture = neutral,PublicKeyToken = ..
未找到的程序集是所有项目引用的第三方程序集。
构建脚本由TFS使用,所以我给出了以下几行:
<RunTest>true</RunTest>
<ItemGroup>
<MetaDataFile Include="$(BuildProjectFolderPath)myproject.vsmdi">
<TestList>CI_Tests</TestList>
</MetaDataFile>
</ItemGroup>
我发现this post显示了这个问题的解决方案,但不幸的是我无法在TFS服务器上创建文件。
救命!
要检查的第一件事是将此程序集复制到msbuild运行测试的文件夹中。由于某些历史原因,您可能会在bin / Debug文件夹中有一个副本,但在项目中未正确设置依赖项。
我在单元测试中遇到了同样的问题。上面的链接文章表明问题是VSTS导致在线程的CallContext中复制某些对象。
对于它的价值,在我的情况下,问题是我在线程的CallContext中手动放置了一个对象,这导致了这个异常。我能够通过清除TestCleanup例程中的CallContext来解决这个问题。我没有必要在任何地方更改任何文件。
我也遇到了同样的问题,但我在构造函数中为基础测试类执行了StructureMap初始化。
通过将调用从构造函数移动到[TestInitialize]
方法,我能够解决问题。我还确保[TestCleanUp]
方法处理创建的StructureMap容器。在此MSBuild(2010)之后将运行测试而不会引发此错误。
有这个错误
Unit Test Adapter threw exception:
Type is not resolved for member 'NHibernate.HibernateException,NHibernate
事实证明,问题是在测试的静态构造函数中抛出异常。它与消息的外观完全无关,并且在使用BuildSchema创建数据库期间发生。
MSTest的非常无法提供的错误信息让我花费了很多时间和压力。在我们的TODO列表中将迁移更像NUnit。
This article用这个错误解决了我的问题:
回顾一下,My Custom Exception是在测试执行的早期阶段抛出的。包含它的DLL尚未加载,因此单元测试适配器确实无法访问它。
在测试程序集时发生的事件已经加载了标记为[Serializable]的类的实例。通过派生MarshalByRefObject来解决此问题,因此不再尝试从mstest主机进行反序列化。