有什么方法可以让
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);
}
}
更新: 因此,使用 rhino 进行的测试数量巨大,因此我必须发现问题所在。 该异常是由 Castle.DynamicProxy 逻辑在 net6 运行时抛出的。这是解决问题的一种方法:
PS: 如果公司允许,我稍后会将修改后的解决方案上传到github。
PPS: Rhino 测试已通过,但存在“测试运行之间”依赖性。因此,如果您一起运行所有测试,其中一些测试可能会随机失败,但如果您单独运行失败的测试,问题就会消失。
多么令人怀念的问题。如果我没记错的话,Rhino Mocks 于 2007 年左右出生在 Ayende。然后它的维护逐渐减少,并由 Mike Meisinger 于 2013 年 接手。 他们的存储库中的最后一次提交是 2014 年,也就是 9 年前。
这比 .NET Core 1.0 早了 2 年。我只想说:这个项目已经死了,将您的代码移植到一个可维护的解决方案中,例如 Moq,其中 v5 也已经酝酿多年了。但如果有效,那就有效。
至于为什么:看异常。反射 API 发生了显着变化,并且模拟非常依赖反射。
当我们开始将工作中的应用程序从 .NET Framework 迁移到 .NET 8 时,我们遇到了同样的问题。我们有一个非常大的代码库,其中有大量用 Rhino.Mocks 编写的单元测试。手动将所有单元测试重写到另一个单元测试框架是不可能的。
感谢其他开发人员,github 上有几个项目将 Rhino.Mocks 迁移到 .net(核心)。例如:https://github.com/rubicon-oss/CoreRhinoMocks
因此,我们使用 CoreRhinoMocks 能够将我们的应用程序切换到 .NET 8,同时也切换到另一个单元测试框架来进行新的单元测试。在我们的例子中是 NUnit
所以我的建议是: