Я использую nj4x и имеет класс, который имеет поля только для чтения следующим образом.Как насмехаться/переопределить поля readonly для модульного тестирования
public class MarketInformation
{
public readonly double ASK;
public readonly double BID;
public readonly double DIGITS;
public readonly double EXPIRATION;
public readonly double FREEZELEVEL;
}
Я пишу модульные тесты для классов и методов, записывающих эти классы. Для изоляции/издевки я использую Nsubstitute и MicrosoftFakes (главным образом, прокладки). Я хочу переопределить эти поля, поэтому, когда они вызываются в моих методах, я получаю предсказуемые результаты для тестирования. Я создал прокладку для этого класса, но все, что он мне предоставляет, - это конструктор, который теперь позволяет мне инициализировать его. Есть ли способ установить эти поля извне этого класса?
Я не очень хорошо осведомлен о насмехах/подделках и т. Д., Но это не значит, что вы задали свои жестко запрограммированные предсказуемые значения для своих полей * внутри * класса mock, то есть вам не нужно проходить это или назначить его извне. Предполагается, что макет должен * быть * реализацией абстракции, которую вы издеваетесь, так же как «настоящий» класс находится в реализации. –
@ rory.ap реализация mocks - это отдельная идея, однако я использую рамки для насмешек и изоляции. Реализация макетов требует абстрактных/интерфейсных классов. однако они недоступны здесь. –
Вам нужно создать интерфейс, который вы можете издеваться. Члены должны быть «виртуальными». (NSubstitute может работать только с виртуальными членами класса, поэтому любой не виртуальный код в классе будет выполняться!) [Ссылка] (http://nsubstitute.github.io/help/creating-a-substitute/) – NtFreX