Nsubstitute无法模拟带有in参数的签名接口

时间:2018-12-13 18:10:56

标签: unit-testing nsubstitute

具有此界面:

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'.

对此有什么解决方法?显然,我可以初始化实型,但是我希望能够模拟它。

1 个答案:

答案 0 :(得分:1)

我认为这是由于使用了Castle.Coredoes 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对此进行了测试,并且我的示例测试开始正确运行。