मैं कमांड लाइन (और इसलिए बिल्ड मशीन पर निर्माण से) से वीएस यूनिट परीक्षण सफलतापूर्वक चला सकता हूं।

VSTest.Console.EXE "MyTest.dll" /logger:trx /platform:x64 /inIsolation

मैं किसी भी आवश्यक परीक्षण को भी फ़िल्टर कर सकता हूं जिसे मैं एक निश्चित वातावरण पर /TestCaseFilter विकल्प के साथ निष्पादित नहीं करना चाहता:

VSTest.Console.EXE "MyTest.dll" /TestCaseFilter:Name!=Verify_DigitallySigned

यह "डिजिटल रूप से हस्ताक्षरित है या नहीं" परीक्षण (परीक्षणों) को चलाने के लिए नहीं के लिए आवश्यक है।

इस तरह मैं टेस्ट केस/एस के आवश्यक सेट को फ़िल्टर कर सकता हूं।

हालांकि, मैं जो चाहता हूं वह यूनिट परीक्षण को यह बताना है कि कुछ परीक्षण (आवेषण) की आवश्यकता नहीं है या नहीं। उदाहरण के लिए "/DontTestSigning" तर्क पास करना। इस तरह इकाई परीक्षण (सी ++ या सी # में लिखे गए) ऐसे पैरामीटर/विकल्प देखेंगे, और अतिरिक्त दावा नहीं करेंगे, इस प्रकार वास्तविक उत्पादन निर्माण (जैसे पीआर बिल्ड पर) पर निर्माण विफलताओं को रोकना।

मैं देखता हूं कि VSTest.Console.exe (और MSTest.exe के साथ भी) के साथ /testsettings विकल्प है, लेकिन मुझे यकीन नहीं है कि कैसे (IF) इसे लागू किया जा सकता है और वास्तविक कुछ "न करें" विकल्प के बारे में जानने के लिए परीक्षण कार्य करता है।

4
Ajay 28 जून 2019, 15:10

2 जवाब

सबसे बढ़िया उत्तर

आप vstest.console-process को .runsettings-file भी प्रदान कर सकते हैं, जैसा कि यहां बताया गया है। https://docs.microsoft.com/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file?view=vs-2019

कस्टम पैरामीटर प्रदान करने के लिए TestRunParameters-अनुभाग को संशोधित करें, उदा:

<!-- Parameters used by tests at runtime -->
<TestRunParameters>
  <Parameter name="executeAsserts" value="1,2,3" />
</TestRunParameters>

इन मापदंडों को अब इस कोड के माध्यम से एक्सेस किया जा सकता है:

TestContext.Properties["executeAsserts"];

ताकि आपका अंतिम परीक्षण-कोड इस तरह दिख सके:

[Test]
public void MyTest()
{
    var assertsToRun = TestContext.Properties["executeAsserts"].Split(",").Select(x => Convert.ToInt(x)).ToArray();
    if(assertsToRun.Contains(1)
        Assert.That(...);
    if(assertsToRun.Contains(2)
        Assert.That(...);
    if(assertsToRun.Contains(3)
        Assert.That(...);
}

आपको निम्न आदेश का उपयोग करके परीक्षण चलाने में सक्षम होना चाहिए:

vstest.console.exe MyTestAssembly.dll /Settings:MySettings.runsettings
4
HimBromBeere 2 जुलाई 2019, 09:43

मूल रूप से आपको अपने परीक्षण में केवल एक Assert के पक्ष में होना चाहिए, ताकि प्रत्येक परीक्षण एक ही चीज़ की जांच कर सके।

तो आपके पास जो है वह इसके समान है, मुझे लगता है:

[Test]
public void MyTest()
{
    Assert.That(...);
    Assert.That(...);
    Assert.That(...);
}

जब आप बहिष्कृत करना चाहते हैं उदा। दूसरा Assert, निश्चित रूप से आपको उन पंक्तियों को निष्पादित करने या न करने के लिए अपने कोड में कुछ कार्यक्षमता प्रदान करनी होगी, जैसे:

public void MyTest()
{
    Assert.That(...);
    if(executeSecondAssert)
        Assert.That(...);
    Assert.That(...);
}

आप कुछ संकलन-स्विच पेश कर सकते हैं जो उपरोक्त बूल-फ्लैग के लिए मान सेट करता है:

#if(EXECUTE_ASSERT)
    bool executeSecondAssert = true;
#else
    bool executeSecondAssert = false;

और अब उस संकलन-स्विच को पर्यावरण-चर के माध्यम से प्रदान करें।

3
HimBromBeere 28 जून 2019, 15:32