プライベート内部クラスの単体テストをセットアップしようとしましたが、ほとんど成功しませんでした。
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);
}
}
}
}
私はこのコードを試しました:
PrivateType statKeyType = new PrivateType("Stats.Model", "Stats.Model.DailyStat.DailyStatKey");
と同様
PrivateType statKeyType = new PrivateType("Stats.Model", "DailyStat.DailyStatKey");
無駄に。
アセンブリの名前は「Stats.Model」で、タイプ名も正しいように見えますが、「System.TypeLoadException:タイプを読み込めませんでした」という例外が発生します。
だから私は何が間違っているのですか?
私の知る限り、PrivateTypeはリフレクションベースであり、名前空間のすぐ下にプライベートクラスを設定することはできないため、このシナリオを対象としていると思います。
編集:
DailyStatKeyの完全な実装を追加しました。テストしたいのは、GetHashCodeメソッドの一意性です。ご覧のとおり、日付と型を1つの整数に収めようとしています。