Я пытаюсь высмеять защищенное поле в классе NodeIdGenerator
. Я хочу установить значение поля в конструкторе, а затем вызвать метод GetNext()
, который принадлежит NodeIdGenerator
.Как насмехаться над защищенным полем?
Im уверен, что мой тест OK:
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
объект, принадлежащий к суперкласса, а не тот, который я хочу, чтобы использовать (в макете классе.)
Итак, как я издеваться защищенного поля?
PS: Я прочитал this question, но я не могу показаться головой и хвостом!
Ха-ха, так просто. Благодарю. Я просто удалил строку `private new int? _previousId; `и hey presto! – Nobody 2010-11-22 21:28:47