Ich versuche, ein geschütztes Feld in der Klasse NodeIdGenerator
zu verhöhnen. Ich möchte den Wert des Feldes in einem Konstruktor festlegen und dann die Methode GetNext()
aufrufen, die zu NodeIdGenerator
gehört.Wie spottet man ein geschütztes Feld?
Im ziemlich sicher, dass mein Test ist 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;
}
}
}
Mein Problem in der Mock-Klasse ist. Als ich GetNext()
in meinem Test nennen, verwendet es das _previousId
Objekt die Oberklasse gehört, nicht derjenige, den ich es benutzen will (in der Mock-Klasse.)
Also, wie Sie verspotten ich das Schutzfeld?
PS: Ich habe gelesen this question, aber ich kann nicht scheinen, Kopf oder Schwanz davon zu machen!
Haha, so einfach. Vielen Dank. Ich habe gerade die Zeile 'private new int 'entfernt. _previousId; 'und hey presto! – Nobody