在我的项目中,我使用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服务器上的文件。
帮助!
答案 0 :(得分:9)
我在单元测试中遇到了同样的问题。上面链接的文章表明问题是VSTS导致在线程的CallContext中复制某些对象。
对于它的价值,在我的情况下问题是我在线程的CallContext中手动放置了一个对象,这导致了这个异常。我能够通过清除TestCleanup例程中的CallContext来解决这个问题。我没有必要在任何地方更改任何文件。
答案 1 :(得分:4)
我也遇到了同样的问题,但我在构造函数中为基础测试类执行了StructureMap初始化。
我能够通过将调用从构造函数移动到[TestInitialize]
方法来解决问题。我还确保[TestCleanUp]
方法处理了创建的StructureMap容器。在此MSBuild(2010)之后将运行测试而不会引发此错误。
答案 2 :(得分:3)
要检查的第一件事是将此程序集复制到msbuild运行测试的文件夹中。由于某些历史原因,您可能在bin / Debug文件夹中有副本,但在项目中未正确设置依赖项。
答案 3 :(得分:1)
发生此错误
Unit Test Adapter threw exception:
Type is not resolved for member 'NHibernate.HibernateException,NHibernate
事实证明,问题出现在测试的静态构造函数中。 它与消息的外观完全无关,并且在使用BuildSchema创建数据库期间发生。
MSTest的非常无法提供的错误消息,这花费了我很多时间和压力。在我们的TODO列表中将迁移更像NUnit。
答案 4 :(得分:0)
This article通过此错误解决了我的问题:
回顾一下,MyCustomException是在测试执行的早期阶段抛出的。包含它的DLL还没有加载,所以Unit Test Adapter确实无法访问它。
答案 5 :(得分:0)
在测试了程序集的情况下,发生了加载标记为[可序列化]的类的实例的情况。解决方法是从MarshalByRefObject派生,以便不再从mstest主机尝试反序列化。