2012-07-06 16 views
8

उत्पन्न करने का प्रयास करते समय specflow विफल रहता है मेरे पास एक प्रोजेक्ट है जो वेब अनुप्रयोग पर स्वीकृति परीक्षण करने के लिए SpecFlow, NUnit और Coypu का उपयोग कर रहा है। मुझे बिल्ड बिल्डिंग पर जेनकींस के माध्यम से प्रोजेक्ट बिल्डिंग ठीक है। जेनकिंस एक पीएससी स्क्रिप्ट को कॉल करता है जो चश्मा प्रोजेक्ट पर एमएसबिल्ड चलाता है, फिर स्क्रिप्ट चश्मे/परीक्षण चलाने के लिए नूनिट-कंसोल को कॉल करती है, और फिर मैं स्पीकफ्लो से एक रिपोर्ट जेनरेट करना चाहता हूं।परीक्षण निष्पादन रिपोर्ट

Framework "4.0" 

task Default -depends RunSpecs 

task BuildSpecs { 
    $env:EnableNuGetPackageRestore = "true" 
    msbuild /t:Rebuild ReturnsPortal.Specs.csproj 
} 

task RunSpecs -depends BuildSpecs { 
    exec { & "C:\path\to\NUnit 2.5.9\bin\net-2.0\nunit-console-x86.exe" /labels /out=TestResult.txt /xml=TestResult.xml .\bin\Debug\TheWebApp.Specs.dll } 
    exec { & "C:\path\to\SpecFlow\1.8.1\specflow.exe" nunitexecutionreport TheWebApp.Specs.csproj /out:SpecResult.html } 
} 

specflow.exe करने के लिए पिछले कार्यकारी कॉल हालांकि विफल रहता है यही कारण है, के साथ:

तत्व < ParameterGroup> नीचे तत्व < UsingTask> गैर मान्यता प्राप्त है। C: \ Program Files (x86) \ जेनकींस \ नौकरियों \ TheWebApp \ कार्यक्षेत्र \ वेब \ साइटें \ TheWebApp.nuget \ nuget.targets

संकेत है कि शायद यह MSBuild संस्करण के साथ एक समस्या है googling के बारे में थोड़ी इस्तेमाल किया जा रहा (उदाहरण के लिए here, here)। लेकिन मेरे पास मेरी psake स्क्रिप्ट में Framework "4.0" है, और चश्मा प्रोजेक्ट .NET Framework 4.0 को लक्षित कर रहा है, और यह बिल्ड चरण में ठीक बनाता है, इसलिए मुझे यकीन नहीं है कि specflow msbuild के पुराने संस्करण का उपयोग क्यों कर रहा है। या शायद कहीं और समस्या है?

+0

क्या आपने msbuild के लिए पूरा रास्ता पारित करने का प्रयास किया था? ('C: \ Windows \ Microsoft।नेट \ Framework64 \ v4.0.30319 \ MSBuild.exe') – KMoraz

+0

धन्यवाद, यह मुद्दा होगा, हालांकि मुझे नहीं पता कि SpecFlow को msbuild के एक निश्चित संस्करण का उपयोग करने के लिए कैसे मजबूर करना है। – ngm

उत्तर

29

यह SpecFlow Wiki से, मेरे लिए जवाब था:

महत्वपूर्ण .NET 4.0 परियोजनाओं के लिए: क्योंकि specflow.exe .NET 3.5 के लिए संकलित किया गया है, यह .NET 4.0 विधानसभाओं डिफ़ॉल्ट रूप से लोड नहीं कर सकता। .NET 4.0 प्रोजेक्ट्स के लिए इस रिपोर्ट को उत्पन्न करने के लिए, आपको config फ़ाइल का उपयोग कर .NET 4.0 रनटाइम का उपयोग करने के लिए specflow.exe को मजबूर करना होगा। बस नीचे कॉन्फ़िगर कॉपी करें और specflow.exe.config फ़ाइल बनाएं और इसे अपने specflow.exe के आगे रखें और आप चरण परिभाषा रिपोर्ट बनाने में सक्षम होंगे।

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
     <supportedRuntime version="v4.0.30319" /> 
    </startup> 
</configuration> 
+0

SpecFlow 2.0 27 जनवरी 2016 को जारी किया गया था, जिसे .NET 4.5 के विरुद्ध संकलित किया गया था। यह समस्या नए संस्करण में नहीं होनी चाहिए। – ngm

2

मैं कॉन्फ़िग फ़ाइल समाधान ऊपर सुझाव का उपयोग करने का प्रयास किया। यह स्थानीय रूप से परीक्षण के लिए काम करता था, लेकिन जैसे ही मैंने अपने सीआई पर्यावरण में अपना कोड धक्का दिया, इस पर सीआई पर्यावरण में उस कॉन्फ़िगरेशन फ़ाइल नहीं है क्योंकि यह उस पर दबा हुआ है। हम सीआई पर्यावरण को केवल विभिन्न पैकेजों के स्वच्छ संस्करणों का उपयोग करने के लिए प्रतिबंधित करते हैं, इसलिए हम सीआई सर्वर में विशेष कॉन्फ़िगरेशन इंजेक्ट करने की कोशिश नहीं करना चाहते थे।

हमने देखा कि SpecFlow विशेष कॉन्फ़िगरेशन फ़ाइल के बिना हमारी कई .NET 4.0 परियोजनाओं के साथ ठीक काम करता है। थोड़ा सा शोध करने के बाद, वास्तविक 'समस्या' NuGet 2.1 प्रतीत होती है। NuGet 1.7 के साथ .NET 4.0 प्रोजेक्ट्स के लिए सब कुछ ठीक काम करता है।

कहीं 1.7 और 2.1 के बीच NuGet ने NuGet.targets फ़ाइल में नई विशेषताएं पेश कीं जो MSBuild के पुराने संस्करणों द्वारा समर्थित नहीं हैं। त्रुटि संदेश द्वारा समझाया गया है, विशेष रूप से समस्या <ParameterGroup> तत्व <UsingTask> के नीचे प्रतीत होती है।

लक्ष्य फ़ाइल पर एक सरसरी नज़र इंगित करता है कि अनुभाग NuGet को अद्यतित रखने के लिए ज़िम्मेदार है। इस खंड को हटाने से इस मुद्दे को पूरी तरह से हल किया जाता है कि उपरोक्त कॉन्फ़िगरेशन फ़ाइल जोड़ना, हालांकि प्रदान करने के लिए लगता है कि स्वयं-अद्यतन कार्यक्षमता को भी हटा रहा है। यह देखते हुए कि .targets फ़ाइल भंडार के लिए प्रतिबद्ध है, यह समाधान सीआई पक्ष पर किसी भी बदलाव के साथ हमारे सीआई पर्यावरण पर भी काम करता है।

यह एनजीएम की तुलना में एक बेहतर समाधान नहीं है, यह सिर्फ एक अलग है। आपके पर्यावरण के आधार पर, यह जाने का एक बेहतर तरीका हो सकता है, या शायद नहीं।

+2

आदर्श रूप से, SpecFlow एक पैकेज पेश करेगा जो .NET 4.0 के लिए संकलित किया गया था, और इन सभी मुद्दों को हल करना चाहिए, लेकिन ऐसा लगता है कि वे इस समय ऐसा करने में रूचि नहीं रखते हैं। – Mir

संबंधित मुद्दे