Ich habe die folgende Klassendefinition, wobei das Feld attribute
durch Reflexion durch NHibernate hydratisiert wird. Das Feld wird nicht als Objekt angezeigt, stattdessen möchte ich seine Implementierung ausblenden und nur Eigenschaften bereitstellen, die auf die Eigenschaften des Felds verweisen.Mocking private Felder mit RhinoMocks
public class CustomerAttribute : ICustomerAttribute
{
private IAttribute attribute;
public string DisplayName
{
get { return attribute.DisplayName;}
}
}
Ich versuche, diese Aufgabe mit RhinoMocks zu verspotten, aber ich bin nicht sicher, wie das attribute
Feld zum Testen Hydrat. Ich habe versucht, das attribute
Feld manuell über Reflexion zu setzen, aber ich bekomme einen Proxy-Fehler von RhinoMocks (was Sinn macht).
Wie kann ich das Feld attribute
hydratisieren, um die Eigenschaften des CustomerAttribute-Objekts zu testen?
Hier ist mein Test jetzt ...
[Test]
public void PropertiesTest()
{
MockRepository mock = new MockRepository();
ICustomerAttribute attribute = mock.StrictMock<ICustomerAttribute>();
//Set the attribute field
FieldInfo fieldInfo = typeof(CustomerAttribute).GetField("attribute",
BindingFlags.Instance | BindingFlags.SetField |
BindingFlags.NonPublic);
fieldInfo.SetValue(attribute, new Domain.Attribute()); //This does not work
Expect.Call(attribute.DisplayName).Return("Postal Code");
mock.ReplayAll();
Assert.AreEqual(true, attribute.DisplayName);
mock.VerifyAll();
}