मैंने कुछ कोड का परीक्षण करने में मेरी सहायता के लिए एक न्यूट थ्योरी बनाई है। परीक्षण किया जा रहा वास्तविक कोड इस प्रश्न के लिए उतना महत्वपूर्ण नहीं है जितना डेटा मैं इसका परीक्षण करने के लिए उपयोग कर रहा हूं। अर्थात् 24 घंटों की घड़ी में घंटे और मिनट।एक न्यूट थ्योरी कैसे डिजाइन करें?
मैंने सुविधाओं पर पूंजीकरण करने और NUnit 2.6 थ्योरी सुविधा के भीतर सीमाओं के अनुरूप इस तरह से अपनी स्थिरता लिखी। विशेष रूप से, मुझे लगा कि मुझे उस सुविधा के आसपास काम करने के लिए घंटे और मिनट जैसी कक्षाएं बनाना था, जो डेटापॉइंट्स सटीक प्रकार से तर्कों से मेल खाते हैं।
[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));
}
}
मैं क्या पाया है कि एक सेट इतनी बड़ी है कि मैं स्मृति से बाहर चलाने में NUnit परिणामों की डिफ़ॉल्ट मिश्रित तर्क के दौरान उत्पादन डेटा सेट के आकार। ऐसा लगता है कि मैंने अपना परीक्षण स्थापित नहीं किया है और डेटा एक समस्या होनी चाहिए, लेकिन यह स्पष्ट रूप से इसलिए है क्योंकि मैं इस समस्या के बारे में सोचने के बारे में सलाह मांग रहा हूं। यहां मुझे आउटऑफमेमरी एक्सेप्शन स्टैक ट्रेस है जो मुझे मिलता है।
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 देखें) प्राप्त करने की कोशिश द्वारा उत्पन्न किया जा करने के लिए प्रतीत होता है कि अपने आप में अजीब है। मुझे यकीन नहीं है कि यह एक बग है (ज्ञात या अन्यथा)। बीटीडब्लू, मुझे एक बहुत ही समान ओओएम अपवाद मिलता है जब मैंने पैरामीटरेटेड परीक्षणों में उपयोग की जाने वाली कम-प्रयोगात्मक रेंज और वैल्यू एट्रिब्यूट्स का उपयोग करके इस स्थिरता को दोबारा लिखा।