내부 private 클래스의 PrivateType의 인스턴스를, 그러나 아주 작은 성공했다 방법 :내가 설정에 개인 내부 클래스에 대한 단위 테스트를 시도하고 있었다
PrivateType statKeyType = new PrivateType("Stats.Model", "Stats.Model.DailyStat.DailyStatKey");
: 나는이 코드를 시도
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);
}
}
}
}
을 뿐만 아니라
아무 소용이 없습니다.
어셈블리의 이름은 "Stats.Model"이며, 나에게 형 이름이 너무 올바른 보이지만, 난 그냥 예외 얻을 : 그래서 내가 뭘를
를 "형식을로드 할 수 없습니다 System.TypeLoadException을" 잘못된 ?
PrivateType은 내 생각에 반성을 기반으로하고 있으며, 네임 스페이스 바로 아래에 개인 클래스를 가질 수 없으므로이 시나리오를위한 것으로 생각됩니다.
편집 :
DailyStatKey의 전체 구현이 추가되었습니다. 테스트하고 싶은 것은 GetHashCode 메서드의 고유성입니다. 보시다시피 date + 유형을 단일 int에 맞추려고합니다.
C#에서 "new SomeType (args)"은 리플렉션을 사용하지 않습니다. 대신 항상 생성자 호출이며 사용 가능한 생성자 중 하나를 호출합니다. 예제 코드에는 생성자가 없으므로 사용 가능한 유일한 생성자는 기본 생성자 (null 생성자 - 인수가없는 생성자)입니다. 클래스가 비공개이기 때문에 외부에서 호출 할 수 없습니다. 그래서 당신은 반성이 필요하다는 것이 옳습니다. – apollodude217
관련 질문 : http : // stackoverflow.질문/3198912/use-reflection-or-a-property-unit-testing – apollodude217
왜 생성자에 대한 부분을 언급하는지 잘 모르겠습니다. Reflection을 사용하는 PrivateType에 대한 의미는 개인 클래스/메소드에 액세스하는 데 RefType을 사용한다는 것입니다. (이것은 MSDN 페이지에서 분명히 드러납니다 : http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privatetype(VS.80).aspx ReflectionPermission이 필요하기 때문에. 관련 질문에 관해서는 그렇습니다. 개인 클래스는 테스트하지 말아야한다는 것을 알고 있습니다 만 내부적으로 만 사용되므로 GetHashCode가 항상 고유 한 값을 반환한다는 것이 중요하므로 테스트를하는 것이 좋습니다. – Steffen