मैं दौड़ने से पहले उन्हें रिपोर्ट करना चाहता हूं, और श्रेणियों के प्रबंधन के बिना शैल स्क्रिप्ट के माध्यम से व्यक्तिगत परीक्षण चलाने का विकल्प है। हमारे पास कुछ अप्रबंधित कोड है जो प्रक्रिया को खराब स्थिति में छोड़ सकता है, और कभी-कभी प्रत्येक नॉनिट-कंसोल रन के प्रत्येक परीक्षण को चलाने में प्रसन्नता होती है।क्या नूनिट-कंसोल परीक्षण परीक्षण में सभी परीक्षण नाम सूचीबद्ध कर सकता है?
उत्तर
नूनिट-कंसोल अभी भी इस विकल्प का समर्थन नहीं कर रहा है। यह प्रतिबिंब का उपयोग कर परीक्षण मामलों की एक सूची प्राप्त करने के लिए काफी सरल है। एक बहुत ही बुनियादी स्तर पर, आप विशेषताओं के साथ public class
के सभी public
विधियों की एक सूची चाहते हैं। आपके परीक्षणों को कैसे संरचित किया जाता है, इस पर निर्भर करते हुए, आपको अतिरिक्त फ़िल्टरिंग करने की आवश्यकता हो सकती है, जैसे [Ignore]
विशेषताओं के साथ चिह्नित किसी भी परीक्षण को हटाने या बेस क्लास में परीक्षण विधियों पर विचार करने के लिए।
एक बुनियादी स्तर पर, कोड कुछ इस तरह दिखेगा:
// Load the assembly containing your fixtures
Assembly a = Assembly.LoadFrom(assemblyName);
// Foreach public class that is a TestFixture and not Ignored
foreach (var c in a.GetTypes()
.Where(x=>x.IsPublic
&& (x.GetCustomAttributes(typeof(NUnit.Framework.TestFixtureAttribute)).Count() > 0)
&& (x.GetCustomAttributes(typeof(NUnit.Framework.IgnoreAttribute)).Count() ==0)))
{
// For each public method that is a Test and not Ignored
foreach (var m in c.GetMethods()
.Where(x=>x.IsPublic
&& (x.GetCustomAttributes(typeof(NUnit.Framework.TestAttribute)).Count() > 0)
&& (x.GetCustomAttributes(typeof(NUnit.Framework.IgnoreAttribute)).Count() ==0)))
{
// Print out the test name
Console.WriteLine("{0}.{1}", c.ToString(), m.Name);
// Alternately, print out the command line to run test case using nunit-console
//Console.WriteLine("nunit-console /run:{0}.{1} {2}", c.ToString(), m.Name, assemblyName);
}
}
जाहिर है आप इस एक सा कारगर बनाने के लिए सक्षम है, तो आप केवल किसी विशेष TestFixture
से परीक्षण तरीकों चाहता था होगी।
जैसा कि टिप्पणियों में कहा गया है, यदि आपको TestCase
और TestCaseSource
जैसे अन्य NUnit विशेषताओं पर ध्यान देना होगा तो यह थोड़ा अधिक जटिल हो जाता है। मैंने इन विशेषताओं की कुछ कार्यक्षमता का समर्थन करने के लिए नीचे दिए गए कोड को संशोधित किया है।
static void PrintTestNames(string assemblyName) {
Assembly assembly = Assembly.LoadFrom(assemblyName);
foreach (var fixture in assembly.GetTypes().Where(x => x.IsPublic
&& (x.GetCustomAttributes(typeof(TestFixtureAttribute)).Count() > 0)
&& (x.GetCustomAttributes(typeof(IgnoreAttribute)).Count() == 0))) {
foreach(var method in fixture.GetMethods().Where(x=>x.IsPublic
&& (x.GetCustomAttributes(typeof(IgnoreAttribute)).Count() == 0)
&& ((x.GetCustomAttributes(typeof(TestAttribute)).Count() > 0)
|| (x.GetCustomAttributes(typeof(TestCaseAttribute)).Count() > 0)
|| (x.GetCustomAttributes(typeof(TestCaseSourceAttribute)).Count() > 0))
)) {
var testAttributes = method.GetCustomAttributes(typeof(TestAttribute)) as IEnumerable<TestAttribute>;
var caseAttributes = method.GetCustomAttributes(typeof(TestCaseAttribute)) as IEnumerable<TestCaseAttribute>;
var caseSourceAttributes = method.GetCustomAttributes(typeof(TestCaseSourceAttribute)) as IEnumerable<TestCaseSourceAttribute>;
if (caseAttributes.Count() > 0) {
foreach(var testCase in caseAttributes) {
if (!string.IsNullOrEmpty(testCase.TestName)) {
PrintTestName(fixture.ToString(), testCase.TestName);
}
else {
string arguments = ExtractArguments(testCase.Arguments);
PrintTestName(fixture.ToString(), method.Name + arguments);
}
}
}
else if (caseSourceAttributes.Count() > 0) {
foreach (var testCase in caseSourceAttributes) {
var sourceName = testCase.SourceName;
if (!string.IsNullOrEmpty(sourceName)) {
var staticMember = fixture.GetField(sourceName, BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);
var instanceMember = fixture.GetField(sourceName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
var staticMethodMember = fixture.GetMethod(sourceName, BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);
var instanceMethodMember = fixture.GetMethod(sourceName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
var staticPropMember = fixture.GetProperty(sourceName, BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);
var instancePropMember = fixture.GetProperty(sourceName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
IEnumerable memberValues;
if (null != staticMember) {
memberValues = staticMember.GetValue(null) as IEnumerable;
}
else if (null != instanceMember) {
var instance = Activator.CreateInstance(fixture);
memberValues = instanceMember.GetValue(instance) as IEnumerable;
} else if(null != staticMethodMember) {
memberValues = staticMethodMember.Invoke(null,new object [0]) as IEnumerable;
}
else if (null != instanceMethodMember) {
var instance = Activator.CreateInstance(fixture);
memberValues = instanceMethodMember.Invoke(instance, new object[0]) as IEnumerable;
}
else if (null != staticPropMember) {
memberValues = staticPropMember.GetValue(null) as IEnumerable;
}
else if (null != instancePropMember) {
var instance = Activator.CreateInstance(fixture);
memberValues = instancePropMember.GetValue(instance) as IEnumerable;
}
else {
Console.WriteLine("*** Ooops...Looks like I don't know how to get {0} for fixture {1}", sourceName, fixture.ToString());
continue;
}
foreach (var memberValue in memberValues) {
if (null != memberValue as IEnumerable) {
PrintTestName(fixture.ToString(), method.Name + ExtractArguments(memberValue as IEnumerable));
}
else {
PrintTestName(fixture.ToString(), method.Name + "(" + memberValue.ToString() + ")");
}
}
} else {
Console.WriteLine("*** Ooops...Looks like I don't know how to handle test {0} for fixture {1}", method.Name, fixture.ToString());
}
}
}
else {
PrintTestName(fixture.ToString(), method.Name);
}
}
}
}
static string ExtractArguments(IEnumerable arguments) {
string caseArgs = "(";
bool first = true;
foreach (var arg in arguments) {
if (first) first = false;
else caseArgs += ",";
caseArgs += Convert.ToString(arg);
}
return caseArgs + ")";
}
static void PrintTestName(string fixture, string testName) {
Console.WriteLine("{0}.{1}", fixture, testName);
//Console.WriteLine("nunit-console /run:{0}.{1} {2}", fixture, testName, assemblyName);
}
आप उपरोक्त कोड के माध्यम से देखते हैं, तो आप देख सकते हैं कि मैं कार्यक्षमता संभाला है जहां परीक्षण के लिए TestCaseSource
एक स्ट्रिंग संपत्ति/विधि/क्षेत्र नामकरण है। आप यह भी देखेंगे कि और कोड है, यह अभी भी बहुत सरल कोड है, इसलिए यदि आप TestCaseSource के वैकल्पिक संस्करण का उपयोग कर रहे थे, या यदि अन्य एनयूनीट विशेषताएँ हैं जिनका उपयोग आप कर रहे हैं, तो इसे आसानी से बढ़ाया जा सकता है I के लिए catered नहीं है।
उपर्युक्त के लिए एक काउंटर जोड़ने के लिए भी आसान होगा ताकि आपके पास आराम का स्तर हो कि परीक्षणों की संख्या के रूप में मुद्रित किया गया था, जो नूनिट-कंसोल चल रहे परीक्षणों की संख्या के रूप में मुद्रित थे।
यह मूल बातें प्राप्त करेगा, लेकिन यदि आप कुछ अधिक उन्नत विशेषताओं का उपयोग करते हैं जो स्वचालित रूप से विभिन्न इनपुट से परीक्षण उत्पन्न कर सकते हैं, तो आप भाग्य से बाहर हैं! –
@ सेबेस्टियन गुड मैंने उपरोक्त को टेस्टकेस + कुछ टेस्टकेससोर्स क्रमपरिवर्तन के लिए समर्थन जोड़ा है। अन्य टेस्टकेससोर्स विकल्पों को संभालने के लिए कोड को विस्तारित करना (या अन्य विशेषताएँ जो मुझे नहीं मिली हैं) सरल होनी चाहिए यदि आप वैकल्पिक लोगों का उपयोग कर रहे हैं, हालांकि मैं इसे पाठक * के लिए * अभ्यास के रूप में छोड़ दूंगा। – forsvarir
आपको उन मामलों पर विचार करने की भी आवश्यकता है जहां टेस्ट क्लास इन गुणों के साथ (सार) आधार वर्गों से प्राप्त होते हैं। फिर गणना को कई बार एक ही परीक्षण विधियों को चलाने के लिए समायोजित करने की आवश्यकता होती है, – WebDancer
अब --explore
कमांड लाइन विकल्प है जिसका प्रयोग परीक्षण के बिना सभी परीक्षण मामलों को सूचीबद्ध करने के लिए किया जा सकता है। अधिक विशेष रूप से
nunit3-console.exe MyProject.dll --explore
अधिक जानकारी के लिए: https://github.com/nunit/docs/wiki/Console-Command-Line#description
- 1. QTestLib में यूनिट परीक्षण - कक्षा/सभी परीक्षणों में एकल परीक्षण/परीक्षण चल रहा है
- 2. क्या यह परीक्षण नाम शीर्ष
- 3. क्या परीक्षण दोहन उपकरण/ढांचा रेल ऐप में समवर्ती अनुरोधों का परीक्षण कर सकता है?
- 4. परीक्षण जावास्क्रिप्ट का परीक्षण
- 5. यूनिट परीक्षण क्या है?
- 6. Asp.net एमवीसी परीक्षण परीक्षण?
- 7. मेकअप परीक्षण मोचा परीक्षण
- 8. परीक्षण दोहन क्या है?
- 9. कार्यात्मक परीक्षण क्या है?
- 10. रेल परीक्षण लटकाना - निष्पादन से पहले मैं परीक्षण नाम कैसे मुद्रित कर सकता हूं?
- 11. परीक्षण
- 12. परीक्षण
- 13. परीक्षण
- 14. परीक्षण
- 15. मैन्युअल परीक्षण वीएस स्वचालित परीक्षण
- 16. परीक्षण पर्यावरण में मोचा परीक्षण चलाएं?
- 17. मैं जीसी परीक्षण कैसे कर सकता हूं?
- 18. क्या सभी यूनिट परीक्षण सफल होना चाहिए?
- 19. यूआई परीक्षण बनाम यूनिट परीक्षण
- 20. "फ़ज़ परीक्षण" और "बंदर परीक्षण"
- 21. परीक्षण स्टूडियो एक्सटेंशन का परीक्षण
- 22. EasyMock: परीक्षण में उस विधि का परीक्षण
- 23. परीक्षण शुरू होने पर परीक्षण
- 24. क्या Dagger गतिविधिInstrumentationTestCase2 परीक्षण
- 25. 'परीक्षण' निर्देश क्या करता है?
- 26. मैं कैसे परीक्षण कर सकता हूं: RSpec
- 27. यूनिट परीक्षण? कैसे? क्या?
- 28. माइक्रोसॉफ्ट यूनिट परीक्षण। क्या परीक्षण विधि निकाय से परीक्षण छोड़ना संभव है?
- 29. जूनिट परीक्षण
- 30. डीबी के बीच क्या अंतर है: परीक्षण: क्लोन, डीबी: परीक्षण: क्लोन_स्ट्रक्चर, डीबी: परीक्षण: लोड, और डीबी: परीक्षण: तैयार करें?
'nunit-सांत्वना के रूप में वे चलाते हैं, लेकिन मैं सही सोच कर कि क्या आप चाहते हैं कि प्राप्त करने के लिए है में हूँ MyAssembly.dll/labels' सभी परीक्षणों दिखाएगा पहले से सूचीबद्ध करें और फिर उपयोगकर्ता को संकेत दें (या उन्हें '/ runlist = 'फ़ाइल में जोड़ें)? और श्रेणियों का उपयोग न करने के लिए तर्क क्या है? – ClickRick
हम उन्हें समय से पहले, सही चाहते हैं। यहां की कुंजी यह थी कि हम उन्हें एक बार में चलाने के लिए चाहते थे, यानि प्रति परीक्षण एक बार, बार-बार नूनिट-कंसोल चलाएं। हमने घटकों को बदल दिया है कि हमें वास्तव में ऐसा करने की ज़रूरत नहीं है, लेकिन मुझे अभी भी आश्चर्य है कि इस पर कोई जवाब नहीं दिख रहा है। –
यदि यह अभी भी आपके लिए एक समस्या थी, तो मैं उनके इवेंट लिस्टनर क्लास का उपयोग करने के लिए लुभाना चाहूंगा (देखें http://imistaken.blogspot.co.uk/2009/03/nunit-extensions-adding-logic-at-run उदाहरण के लिए एचटीएमएल) यह देखने के लिए कि क्या आप इस तरह से सूची प्राप्त कर सकते हैं, लेकिन वह उस बिंदु पर परीक्षणों के वास्तविक चलने को दबाने में सक्षम होने पर निर्भर करेगा, और ऐसा कुछ है जिसे मैं कोशिश किए बिना नहीं जानता। – ClickRick