일부 코드를 테스트하는 데 도움이되는 NUnit 이론을 만들었습니다. 테스트되는 실제 코드는이 질문에 대해 내가 테스트하는 데 사용하는 데이터만큼 중요하지 않습니다. 즉, 24 시간제 시간 및 분.NUnit 이론을 설계하는 방법은 무엇입니까?
필자는이 기능을 이용하여 기능을 활용하고 NUnit 2.6 이론 기능의 제한 사항을 준수하기 위해 필자의 조명기를 작성했습니다. 특히 Datapoints가 정확한 유형의 인수와 일치한다는 특징을 해결하기 위해 Hour 및 Minute와 같은 클래스를 만들어야한다고 느꼈습니다. 내가 찾은 무엇
[TestFixture]
public class TimeWindowParserTheoryFixture
{
public class Hour
{
public int Value;
}
public class Minute
{
public int Value;
public string AsString { get { return Value.ToString("00"); } }
}
[Datapoints]
public IEnumerable<Hour> Hours
{
get
{
return Enumerable
.Range(0, 25)
.Select(v => new Hour() { Value = v })
.Union(Enumerable.Repeat((Hour)null, 1));
}
}
[Datapoints]
public IEnumerable<Minute> Minutes
{
get
{
return Enumerable
.Range(0, 60)
.Select(v => new Minute() { Value = v })
.Union(Enumerable.Repeat((Minute)null, 1));
}
}
[Datapoints]
public IEnumerable<string> Separators
{
get { return new[] { " ", "-" }; }
}
[Theory]
public void ValidHours(Hour startHour,
Minute startMinute,
Hour endHour,
Minute endMinute,
string separator)
{
Assume.That(startHour != null);
Assume.That(endHour != null);
var parser = new TimeWindowParser();
var startMinutesString = String.Format("{0}{1}", startMinute == null ? "" : ":", startMinute == null ? "" : startMinute.AsString);
var endMinutesString = String.Format("{0}{1}", endMinute == null ? "" : ":", endMinute == null ? "" : endMinute.AsString);
var pattern = String.Format("{0}{1}{2}{3}{4}{5}{6}", startHour, startMinutesString, "", separator, endHour, endMinutesString, "");
//Console.WriteLine(pattern);
var result = parser.Parse(pattern);
Assert.That(result, Is.Not.Null);
Assert.That(result.Start, Is.EqualTo(startHour));
Assert.That(result.End, Is.EqualTo(endHour));
}
}
은 그 I 메모리가 부족할 정도로 큰 세트 NUnit과 결과의 기본 조합 논리 동안 생성 된 데이터 세트의 크기입니다. 그것은 내가 테스트를 설정하고 데이터가 문제가되어야하는 것처럼 보이지 않지만 분명히 그렇기 때문에 나는이 문제에 대해 어떻게 다르게 생각하는지에 대한 조언을 구하고 있습니다. 내가 얻은 OutOfMemoryException 스택 추적이있다.
System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at System.Text.StringBuilder.ExpandByABlock(Int32 minBlockCharCount)
at System.Text.StringBuilder.Append(Char* value, Int32 valueCount)
at System.Text.StringBuilder.AppendHelper(String value)
at System.Text.StringBuilder.Append(String value)
at NUnit.Core.MethodHelper.GetDisplayName(MethodInfo method, Object[] arglist)
at NUnit.Core.Builders.NUnitTestCaseBuilder.BuildSingleTestMethod(MethodInfo method, Test parentSuite, ParameterSet parms)
이 예외는 단순히 시험 방법의 이름을 (하는 getDisplayName 참조)를 얻으려고 노력에 의해 생성 될 나타납니다 자체 홀수입니다. 이것이 (알려진 또는 그렇지 않은) 버그인지 확실하지 않습니다. BTW, Parameterized 테스트에 사용 된 덜 실험적인 범위 및 값 특성을 사용하여이 조명기를 다시 작성하면 매우 유사한 OOM 예외가 발생합니다.