具有此界面:
public interface ICandyManager
{
IReadOnlyList<string> GetCandies(in ReadOnlySpan<byte> bytes);
}
当我尝试使用nsubstitute模拟接口时:
ICandyManager nb = Substitute.For<ICandyManager>();
我收到以下错误:
Message: System.TypeLoadException : Signature of the body and declaration in a method implementation do not match. Type: 'Castle.Proxies.ICandyManager'. Assembly: 'DynamicProxyGenAssembly2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
对此有什么解决方法?显然,我可以初始化实型,但是我希望能够模拟它。
答案 0 :(得分:1)
我认为这是由于使用了Castle.Core的does not support reference semantics for value types版本造成的。
目前,我有两种方法可以解决此问题:
1)将NSubstitute升级到4.0.0 Release Candidate 1或更高版本。它使用Castle.Core 4.3.1(或更高版本),并且可以与您问题中的界面正常工作。
2)继续使用NSubstitute 3.1.0,但在测试项目中添加对较新的Castle.Core NuGet包的引用。我使用NSubstitute 3.1.0和Castle.Core 4.3.1对此进行了测试,并且我的示例测试开始正确运行。