के लिए मैं JaredPar's idea पसंद आया लेकिन मैं हर सहायक उत्पादन विधि मैं था Console.Out
और Console.Error
में पारित करने के लिए नहीं चाहता था। लेकिन, मेरा उत्पादन एकल वर्ग के माध्यम से जाना है, तो मैं बस उस में एक जोड़े को स्थिर फ़ील्ड सेट:
internal static TextWriter _stdOut = Console.Out;
internal static TextWriter _stdErr = Console.Error;
मैं इन क्षेत्रों का उपयोग करने के उत्पादन हैंडलर कक्षा में मेरी उत्पादन के तरीकों अपडेट किया गया। मैं तो अद्यतन कि परियोजना की AssemblyInfo.cs शामिल करने के लिए:
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("MyTestProject")]
इस तरह, मैं _stdOut
और मेरे परीक्षण तरीकों में _stdErr
ओवरराइड कर सकते हैं, का परीक्षण किया जा करने के लिए अपने विधि कॉल (जो मेरी उत्पादन से निपटने वर्ग का उपयोग करता है), और इस बात की पुष्टि आउटपुट मुझे उम्मीद थी।
OutputHandler._stdOut = new StringWriter();
MySnazzyMethod("input", 1, 'c');
OutputHandler._stdOut.Flush();
string expected = "expected output";
string stdout = OutputHandler._stdOut.ToString().Trim(new[] { '\r', '\n' });
Assert.IsFalse(string.IsNullOrEmpty(stdout));
Assert.AreEqual(expected, stdout);
स्रोत
2010-02-19 18:44:48
परीक्षण कक्षाओं में स्थिर क्षेत्रों से सावधान रहें। यदि आप उनका उपयोग करने जा रहे हैं, तो आउटपुट हैंडलर__स्टडीऑट और/या आउटपुट हैंडलर._स्टडीएआरआर को सेट करने वाले किसी भी परीक्षण की शुरुआत में सुनिश्चित करना सुनिश्चित करें। एमएसटीएस्ट यूनिट टेस्ट सूट (आदेशित परीक्षण नहीं) एक नोडेटर्मेनिस्टिक फैशन में चलते हैं, इसलिए बाद में आपके रन में परीक्षणों में इन फ़ील्ड को कंसोल पर ठीक से सेट नहीं किया जा सकता है। आउट और कंसोल। उन टेक्स्ट राइटर्स का उपयोग करने से पहले त्रुटि दें। (TestInitialize() और TestCleanup() इसके खिलाफ किसी भी सुरक्षा की गारंटी नहीं देते हैं।) – David