Cómo instanciar PrivateType de clase privada interna
Estaba tratando de configurar una prueba de unidad para una clase interna privada, pero tuve muy poco éxito:
namespace Stats.Model
{
public class DailyStat
{
private class DailyStatKey // The one to test
{
private DateTime date;
public DateTime Date
{
get { return date; }
set { date = value.Date; }
}
public StatType Type { get; set; }
public override int GetHashCode()
{
return Date.Year * 1000000 +
Date.Month * 10000 +
Date.Day * 100 +
(int)Type;
}
public override bool Equals(object obj)
{
DailyStatKey otherKey = obj as DailyStatKey;
if (otherKey == null)
return false;
return (this.Date == otherKey.Date && this.StatType == otherKey.StatType);
}
}
}
}
Probé este código:
PrivateType statKeyType = new PrivateType("Stats.Model", "Stats.Model.DailyStat.DailyStatKey");
tanto como
PrivateType statKeyType = new PrivateType("Stats.Model", "DailyStat.DailyStatKey");
En vano.
El nombre del ensamblado es "Stats.Model", y para mí el nombre del tipo también parece correcto, pero solo recibo una excepción: "System.TypeLoadException: No se pudo cargar el tipo"
Entonces, ¿qué estoy haciendo mal?
PrivateType, que yo sepa, se basa en la reflexión, y supongo que está destinado principalmente a este escenario, ya que no puede tener una clase privada directamente debajo de un espacio de nombres.
EDITAR:
Se agregó la implementación completa de DailyStatKey. Lo que quiero probar es la singularidad de mi método GetHashCode. Como puede ver, trato de ajustar una fecha + tipo en un solo int.