Nsubstitute не может макетировать интерфейсы с подписью с параметром in - PullRequest
0 голосов
/ 13 декабря 2018

Имея этот интерфейс:

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 голосов
/ 14 декабря 2018

Я думаю, что это происходит из-за версии Castle.Core , которая не поддерживает ссылочную семантику для типов значений .

В настоящее время естьЕсть два способа исправить это:

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, и мой пример теста начал работать правильно.

...