Rhino Mock与.Net 6的兼容性

gcuhipw9  于 2023-04-13  发布在  .NET
关注(0)|答案(1)|浏览(138)

有什么方法可以让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测试通过,但存在«测试运行之间»的依赖关系。因此,如果您同时运行所有测试,其中一些可能会随机失败,但如果您单独运行失败的测试,问题就会消失。*
drkbr07n

drkbr07n1#

多么怀旧的问题。Rhino Mocks诞生于Ayende,如果我没记错的话,大约在2007年。然后它的维护减少了,由Mike Meisinger in 2013拾取。their repo中的最后一次提交是在2014年,也就是9年前。
这比.NET Core 1.0早了2年。可以说:这个项目已经死了,把你的代码移植到一个维护的解决方案,比如Moq,它的v5也已经开发了很多年了。2但是如果它能工作,它就能工作。
至于原因:请看例外。反射API已经发生了重大变化,并且mocking非常需要反射。

相关问题