有什么方法可以让rhino.mocks
在.NET 6
平台的测试项目中工作吗?
我总是得到异常,当下面的代码被调用时(在.NET 6项目下)。
例外情况:
未找到方法:'System.Reflection.Emit.AssemblyBuilder System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess)'。'
验证码:
public interface IFoo
{
void Go();
int Run();
}
[TestFixture]
public class UnixTest
{
private MockRepository _repo;
[SetUp]
public void Setup()
{
_repo = new MockRepository();
}
[Test]
public void Test()
{
var stub = _repo.StrictMock<IFoo>();
Assert.NotNull(stub);
}
}
**update:**所以,使用rhino的测试数量很大,所以我不得不发现问题。异常是由Castle.DynamicProxy逻辑在net 6运行时抛出的。这里有一种方法可以解决这个问题:
1.下载rhino-mock的源代码
1.通过工具dotnet-migrate-2019.exe转换项目文件
1.将所有项目迁移到.net framework v.4.6.2平台(castle.core需要最低版本)
1.方式要点:更新所有的RhinoMocks项目外部引用(xunit,castle.core5等)
1.要使解决方案能够编译,需要修改源代码。此外,您将丢失委托存根和远程处理存根(跨应用程序域存根)。实际上,在我们的测试中,我们没有使用这两个功能,所以对我来说这不是问题。结果,你可以在net6.0或net6.0-windows平台上创建测试项目。2添加显式链接到编译好的rhino库,一切都会正常工作。当然是在Windows系统下。
- PS:如果我的公司允许,我稍后会将修改后的解决方案上传到github。*
- PPS:Rhino测试通过,但存在«测试运行之间»的依赖关系。因此,如果您同时运行所有测试,其中一些可能会随机失败,但如果您单独运行失败的测试,问题就会消失。*
1条答案
按热度按时间drkbr07n1#
多么怀旧的问题。Rhino Mocks诞生于Ayende,如果我没记错的话,大约在2007年。然后它的维护减少了,由Mike Meisinger in 2013拾取。their repo中的最后一次提交是在2014年,也就是9年前。
这比.NET Core 1.0早了2年。可以说:这个项目已经死了,把你的代码移植到一个维护的解决方案,比如Moq,它的v5也已经开发了很多年了。2但是如果它能工作,它就能工作。
至于原因:请看例外。反射API已经发生了重大变化,并且mocking非常需要反射。