2009-07-17 8 views
20

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

मुझे आशा है कि यह संभव है, क्योंकि विजुअल स्टूडियो में, Ctrl + R, A को मारकर, वर्तमान में खोले गए समाधान में सभी परीक्षण चलाते हैं।

जिस तरह से मैंने सहायता फ़ाइलों का दुरुपयोग किया है, आपको विशेष रूप से प्रत्येक डीएलएल में पास करना होगा।

मैं इसे अपने क्रूज़ कंट्रोल.नेट सर्वर से कमांड लाइन से चलाने के लिए चाहता हूं, इसलिए मैं ऐसा करने के लिए अन्य उपयोगिताएं लिख सकता हूं। अगर किसी अन्य विधि के माध्यम से ऐसा होने का एक भयंकर तरीका है, तो मुझे बताएं।

मैं समाधान के लिए सभी परीक्षण परियोजनाओं को चलाने के लिए एमएसटीएस्ट कैसे कहूं?

<exec> 
    <!--MSTEST seems to want me to specify the projects to test --> 
    <!--I should be able to tell it a SOLUTION to test!--> 
    <executable>mstest.exe</executable> 
    <baseDirectory>C:\projects\mysolution\</baseDirectory> 
    <buildArgs>/testcontainer:testproject1\bin\release\TestProject1.dll 
    /runconfig:localtestrun.Testrunconfig 
    /resultsfile:C:\Results\testproject1.results.trx</buildArgs> 
    <buildTimeoutSeconds>600</buildTimeoutSeconds> 
</exec> 
+0

क्या आपने कभी यह हल किया है? मैं समझ नहीं सकता कि CC.NET में "CreateItem" सामग्री कैसे बनाएं? – D3vtr0n

उत्तर

-1

मैं सिर्फ एक लक्ष्य है कि यह जिस तरह से आप चाहते हैं कॉल बारे में है, तो एक बैच फ़ाइल लक्ष्य होता है कि सभी DLL का परीक्षण किया जा करने के लिए कॉल कि कोड़ा करेंगे।

जब तक आप हर समय परीक्षण परियोजनाओं को जोड़ नहीं रहे हैं, तो आपको इसे शायद ही कभी संशोधित करने की आवश्यकता होगी।

+0

हम प्रत्येक 4-5 महीनों में परीक्षण परियोजनाओं को जोड़ते हैं, इस परियोजना को "ऑटो बिल्डिंग" के लिए "मास्टर" समाधान में डालकर पहले से ही एक खरगोश है। मैं लोगों को याद रखने के लिए और कदम जोड़ने को कम करने की कोशिश कर रहा हूं। परीक्षण के बारे में डरावनी बात यह है कि आपके द्वारा लिखे गए परीक्षणों को कभी भी चलाने में कितना आसान नहीं है। – Jeremiah

+0

क्या प्रत्येक गैर-परीक्षण परियोजना में एक एकल संबंधित परीक्षण प्रोजेक्ट है? –

-1

क्यों नहीं सिर्फ एक फ़ोल्डर में सभी परीक्षण असेंबली msbuild आउटपुट है।

इसे पूरा करने के लिए msbuild में आउटपुटपैथ, आउटपुटडियर, आउटडियर गुणों को सेट करने का प्रयास करें।

तब उस फ़ोल्डर में सभी असेंबली के खिलाफ सबसे अच्छा निष्पादन किया गया है।

+0

उस समस्या के साथ परीक्षण असेंबली सही असेंबली के बगल में हैं जो वे परीक्षण कर रहे हैं। "* .dll" जैसे कमांड को भेजना। मैं इस प्रक्रिया को काफी मूर्ख बनाने की कोशिश कर रहा हूं, इसलिए हम हमेशा उन परियोजनाओं का परीक्षण कर रहे हैं जिन्हें हम जोड़ते हैं। अगर हम एक नई परीक्षा परियोजना जोड़ते हैं, जो शायद हर 4-5 महीने (चरणों को भूलने के लिए पर्याप्त छोटा) होगा, तो मैं परीक्षण परियोजनाओं के लिए बस एक समाधान पढ़ने की प्रक्रिया करना चाहता हूं। – Jeremiah

+0

क्या आप अपनी टेस्ट असेंबली को प्रत्ययित करते हैं। सबसे अच्छा? – Ryu

0

आप परीक्षण परियोजनाओं के नामकरण और स्थान पर कुछ सम्मेलन को लागू कर सकते हैं, तो आप अपने समाधान के स्थान के नीचे सभी * Test.dll पर एमएसटीएस्ट चला सकते हैं।

जहां तक ​​मुझे पता है, समाधान फ़ाइल पर 'सामान्य' डीएलएल परियोजना आधारित एकल से परीक्षण परियोजना बताने का कोई तरीका नहीं है। इसलिए, परीक्षण परियोजनाओं को खोजने के लिए प्रोजेक्ट फ़ाइलों और/या .vsmdi फ़ाइलों का विश्लेषण करने का विकल्प हो सकता है, लेकिन यह मुश्किल हो सकता है।

0

मुझे सीधे नहीं पता लेकिन यह वह जगह है जहां वीएसएमडीआई [एफएक्स: एक कोने में थूक] मदद कर सकते हैं। अपने समाधान में वीएसडीडीआई के सभी परीक्षण जोड़ें। और फिर VSMDI को/testmetadata का उपयोग करके mstest पास करने के लिए पास करें।

हालांकि मैं सुझाव दूंगा कि आप उपरोक्त सम्मेलनों का पालन करें। और एक नामकरण परंपरा का उपयोग करें और बाहर डंप कि पाश के लिए एक का कहना है कि आदेश स्क्रिप्ट

10

में थोड़ा अधिक ठोस VladV के जवाब पर विस्तृत और चीजों को बनाने के लिए उपयोग कर रहा SLN फ़ाइल, सुझाव नामकरण अपने परीक्षण चलाने के लिए आसानी से किया जा सकता है सम्मेलन का अनुसरण करने से MSBuild के साथ स्वचालित हो। मेरे वर्तमान प्रोजेक्ट की msbuild फ़ाइल से निम्न स्निपेट ठीक वही करता है जो आपने पूछा था।

<Target Name="GetTestAssemblies"> 
    <CreateItem 
     Include="$(WorkingDir)\unittest\**\bin\$(Configuration)\**\*Test*.dll" 
     AdditionalMetadata="TestContainerPrefix=/testcontainer:"> 
     <Output 
      TaskParameter="Include" 
      ItemName="TestAssemblies"/> 
    </CreateItem> 
</Target> 
<!-- Unit Test --> 
<Target Name="Test" DependsOnTargets="GetTestAssemblies"> 
    <Message Text="Normal Test"/> 
<Exec 
    WorkingDirectory="$(WorkingDir)\unittest" 
    Command="MsTest.exe @(TestAssemblies->'%(TestContainerPrefix)%(FullPath)',' ') /noisolation /resultsfile:$(MSTestResultsFile)"/> 
    <Message Text="Normal Test Done"/> 
</Target> 

इसके अलावा क्रूज़ कंट्रोल के साथ एमएसबिल्ड को एकीकृत करना केक का एक टुकड़ा है।

संपादित
यहां अपने ccnet.config से MSBuild 'कॉल' कर सकते हैं।

पहले अगर आप पहले से पहले प्रस्तुत टुकड़ा के संबंध में निम्न xml जोड़ने के अपने निर्माण स्वचालन के लिए MSBuild का उपयोग नहीं करते:

<Project DefaultTargets="Build" 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    ..... <insert snippet here> ..... 
</Project> 

सहेजें इस में उदा आपके स्रोत पेड़ में आपके समाधान के बगल में RunTests.proj। अब आप निम्न के ऊपर ccnet.config की बिट को संशोधित कर सकते हैं:

<msbuild> 
    <executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable> 
    <workingDirectory>C:\projects\mysolution\</workingDirectory> 
    <baseDirectory>C:\projects\mysolution\</baseDirectory> 
    <projectFile>RunTests.proj</projectFile> 
    <targets>Test</targets> 
    <timeout>600</timeout> 
    <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger> 
</msbuild> 
+0

क्रूज़ कंट्रोल कॉन्फ़िगरेशन में आप इसे कैसे और कहां शामिल करते हैं? क्या आपके द्वारा प्रदान किया गया यह कोड किसी नैनट कार्य में रहने की आवश्यकता है। बिल्ड स्क्रिप्ट? या यह एक्सएमएल सीधे CC.NET कॉन्फ़िगरेशन में जाता है? – D3vtr0n

+0

मेरी इच्छा है कि यह "केक का टुकड़ा" था। मुझे लगता है कि यह एक पीओएस है व्यक्तिगत रूप से! आप CruiseControl.NET में यह कैसे करते हैं?मूल प्रश्न यह नहीं पूछा कि एमएसबिल्ड में ऐसा कैसे करें! – D3vtr0n

+0

@ डेवट्रॉन ने जवाब का विस्तार किया, क्या यह मदद करता है? –

1

मुझे पता है इस सूत्र काफी पुरानी है, लेकिन इसके अभी भी गूगल पर उच्च तो मैं मैं एक या दो मदद कर सकता है सोचा। वैसे भी, क्योंकि इसके लिए कोई संतोषजनक समाधान नहीं है। मैंने इसके लिए एक एमएसबिल्ड कार्य लिखा है। जानकारी यहां पाया जा सकता है: http://imistaken.blogspot.com/2010/08/running-all-tests-in-solution.html

+0

यह अच्छा है और आप सभी को CruiseControl.NET में कैसे काम करते हैं? EXEC कार्य परीक्षण संकलन के साथ? – D3vtr0n

2

यह एक पुरानी धागा है, लेकिन मैं एक ही मुद्दे के साथ संघर्ष कर रहा है और मैंने महसूस किया कि आप वास्तव में सिर्फ पूरे समाधान में हर dll पर MSTest चला सकते हैं और यदि ऐसा नहीं होता वास्तव में किसी भी समस्या का कारण बनता है। एमएसटीएस्ट [टेस्टमैथ] विशेषता के साथ चिह्नित असेंबली में विधियों की तलाश में है, और असेंबली जो "परीक्षण" असेंबली नहीं हैं, उनके पास उस विशेषता के साथ सजाए गए किसी भी तरीके नहीं होंगे। तो आपको "निष्पादित करने के लिए कोई परीक्षण नहीं मिलता है।" संदेश वापस और कोई नुकसान नहीं हुआ।

तो NAnt में उदाहरण के लिए आप यह कर सकते हैं:

<target name="default"> 
    <foreach item="File" property="filename"> 
     <in> 
      <items> 
       <include name="**\bin\Release\*.dll" /> 
      </items> 
     </in> 
     <do> 
      <echo message="${filename}" /> 
      <exec program="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"> 
       <arg value="/testcontainer: ${filename}" /> 
       <arg value="/nologo" /> 
      </exec> 
     </do> 
    </foreach> 
</target> 

और यह समाधान में हर बिन \ रिलीज फ़ोल्डर में हर dll में सभी परीक्षण तरीकों चलेंगे। जो परीक्षण डीएलएस नहीं हैं वे "निष्पादित करने के लिए कोई परीक्षण नहीं करेंगे।" और जिनके पास परीक्षण हैं, वे परीक्षण चलाएंगे। एकमात्र भाग जिसे मैंने अभी तक नहीं समझा है वह यह है कि (NANT में) निष्पादन पहली बार बंद हो जाता है जब एक कमांड शून्य-शून्य मान देता है। इसलिए यदि कोई यूनिट परीक्षण विफल रहता है तो यह बाद के असेंबली में किसी भी परीक्षण को निष्पादित नहीं करता है। यह बहुत अच्छा नहीं है, लेकिन यदि सभी परीक्षण पास होते हैं, तो वे सभी दौड़ेंगे।

+1

बीटीडब्ल्यू - एनएएनटी को चलाने के लिए रास्ता तय करने का तरीका, भले ही कुछ यूनिट परीक्षण विफल हो जाएं, निष्पादन कार्य पर failonerror = "false" विशेषता डालना है। इस तरह आपके सभी परीक्षण तब भी चलेंगे जब एक परियोजना में कुछ विफल हो जाते हैं। आप किसी प्रॉपर्टी में प्रत्येक टेस्ट रन के रिटर्न वैल्यू स्टोर कर सकते हैं और उसके बाद सभी परीक्षणों के बाद, आप उस प्रॉपर्टी की जांच कर सकते हैं और यदि यह 0 से बड़ा है तो आप इसे मैन्युअल रूप से विफल कर सकते हैं: 0} "संदेश =" कुछ परीक्षण विफल हो गए। " /> –

2

मैं हाल ही में इस समस्या को हल करता हूं। यहाँ मेरा प्रस्ताव है: के MSTest

  1. पहले testmetadata + testlist विकल्प का उपयोग करें (vsmdi)
  2. कमांडलाइन होना चाहिए mstest /testmetadata:....vsmdi /testlist:<name>
  3. फिर MSTest
  4. चलाने के लिए ccnet config का उपयोग आप testmetadata फ़ाइल में एक testlist बनाना चाहिए
+4

लेकिन इसका मतलब है कि जब भी आप एक नया परीक्षण – gbjbaanb

+0

जोड़ते हैं तो आपको .vsmdi फ़ाइल को बनाए रखना होगा, इसके मूल्य के लिए, परीक्षण सूचियों को VS2012 के रूप में बहिष्कृत किया गया है। –

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

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