Я пытаюсь смоделировать защищенное поле в классе NodeIdGenerator
. Я хочу установить значение поля в конструкторе и затем вызвать метод GetNext()
, который принадлежит NodeIdGenerator
.
Я уверен, что мой тест в порядке:
public class NodeIdGeneratorTests
{
[Fact(DisplayName = "Throws OverflowException when Int32.MaxValue " +
"IDs is exceeded")]
public void ThrowsOverflowExceptionWhenInt32MaxValueIdsIsExceeded()
{
var idGenerator = new NodeIdGeneratorMock(Int32.MaxValue);
Assert.Throws(typeof(OverflowException),
() => { idGenerator.GetNext(); });
}
/// <summary>
/// Mocks NodeIdGenerator to allow different starting values of
/// PreviousId.
/// </summary>
private class NodeIdGeneratorMock : NodeIdGenerator
{
private new int? _previousId;
public NodeIdGeneratorMock(int previousIds)
{
_previousId = previousIds;
}
}
}
Моя проблема в фиктивном классе. Когда я вызываю GetNext()
в моем тесте, он использует объект _previousId
, принадлежащий суперклассу, а не тот, который я хочу использовать (в mock классе)
Итак, как мне издеваться над защищенным полем?
PS: я прочитал этот вопрос , но я, кажется, не могу понять, что это, ни голова, ни хвост!