Existen algunas pruebas unitarias en mi proyecto en las que queremos poder establecer algunas propiedades que tienen entidades privadas. Actualmente lo estoy haciendo a través de la reflexión y la extensión de este método:¿Cómo puedo pasar una propiedad a través de una expresión lambda?
public static void SetPrivateProperty(this object sourceObject, string propertyName, object propertyValue)
{
sourceObject.GetType().GetProperty(propertyName).SetValue(sourceObject, propertyValue, null);
}
Suponiendo que tenía un TestObject así:
public class TestObject
{
public int TestProperty{ get; private set; }
}
puedo luego llamar a esto en mis pruebas de unidad de la siguiente manera:
myTestObject.SetPrivateProperty("TestProperty", 1);
Sin embargo, me gustaría tener la validación del nombre de la propiedad en tiempo de compilación, y así me gustaría poder pasar la propiedad en la expresión, de esta manera:
myTestObject.SetPrivateProperty(o => o.TestProperty, 1);
¿Cómo puedo hacer esto?
¿Cuál es el propósito de la expresión lambda? Para proporcionar validación en tiempo de compilación? – mellamokb
@mellamokb Sí. Si hay otro medio para hacer eso, soy un juego. – Sterno
Ver http://stackoverflow.com/questions/671968/retrieving-property-name-from-lambda-expression – phoog