отражение - лучший способ сделать это. Мне нравится создавать метод расширения в базовой тестовой сборке с полезными функциями, такими как доступ / настройка приватных членов и т. д.
другой вариант (если допустимо сделать установщик защищенным, а не личным - что может иметь место, а может и не быть, но если у вас есть защищенный член с аналогичным желанием), то ваш подкласс теста будет иметь класс под тестом. это кажется грязным и не кажется хорошей идеей, но я не могу придумать практическую причину, почему это плохо и достигло бы цели здесь.
public static class ReflectionExtensions
{
public static T GetPrivateFieldValue<T>(this object instance, string fieldName)
{
var field = instance.GetType().GetField(fieldName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
if (field != null)
{
return (T) field.GetValue(instance);
}
throw new ArgumentException("The field specified could not be located.", "fieldName");
}
public static void SetReadonlyProperty(this object instance, string propertyName, object value)
{
instance.GetType().GetProperty(propertyName).SetValue(instance, value, null);
}
public static void SetStaticReadonlyProperty(this Type type, string propertyName, object value)
{
type.GetProperty(propertyName).GetSetMethod(true).Invoke(null, new[] { value });
}
}