c# - क्लास इनिशियलाइज़ में उत्पन्न डेटा चालित परीक्षण: अब Visual Studio 2012 में काम नहीं कर रहा है



unit-testing visual-studio-2012 (1)

मैंने विजुअल स्टूडियो 2010 से विजुअल स्टूडियो 2012 में उन्नत किया है

मेरी यूनिट टेस्ट प्रोजेक्ट में, मेरे पास एक [क्लास इनिशियलाइज़] पद्धति है जो सीएसवी फ़ाइल उत्पन्न करती है, जो मैं सीएसवी से जुड़ा [डेटासॉर्स] का उपयोग करते हुए डाटा-चालित [टेस्टमिशन] में फ़ीड करता हूं।

यह विजुअल स्टूडियो 2010 में महान काम करता है

मुझे यह दृश्य स्टूडियो 2012 में काम करने के लिए नहीं मिल सकता है

ऐसा लगता है कि वीएस2012 में एमएस टेस्ट रनर को [डेटास्रोत] से जुड़ी फाइल पहले से ही मौजूद है, अन्यथा कोई भी टेस्ट रन नहीं होगा। अगर मैं सीएसवी खुद बनाऊँ, डेटा चालित परीक्षण चलाते हैं, लेकिन वे [क्लास इनिसिलाइज़] में बनाए गए डेटा को नहीं उठाते हैं: ऐसा लगता है कि [डाटासॉर्स] से परीक्षणों की सूची का मूल्यांकन [क्लास इनिशियलाइज़] चलाता है।

क्या आसपास कोई काम है?

यह एक न्यूनतम परियोजना है जो समस्या को पुन: उत्पन्न करता है। मेरे लिए, यह VS2010 में सफल होता है लेकिन VS2012 में विफल रहता है।

TestProject.cs

using System.Diagnostics;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace TestProject
{
    [TestClass]
    public class DataDrivenUnitTest
    {
        private static bool _classInitializeCalled;
        private static int _testCount;

        public TestContext TestContext { get; set; }

        [ClassInitialize]
        public static void ClassInitialize(TestContext testContext)
        {
            // Generate the csv list of tests
            //TestContext = testContext;
            _classInitializeCalled = true;
            string testDirectory;
            testDirectory = testContext.DeploymentDirectory;
            using (var f = new StreamWriter(testDirectory + @"\" + "TestList.csv"))
            {
                f.WriteLine("TestName");
                f.WriteLine("TestA");
                f.WriteLine("TestB");
            }
        }

        [TestMethod]
        [DataSource("CsvTestData32")]
        public void TestMethod1()
        {
            _testCount++;
            var testName = TestContext.DataRow["TestName"];
            Debug.Print("Test {0}: {1}", _testCount, testName);
        }

        [ClassCleanup]
        public static void ClassCleanup()
        {
            Assert.IsTrue(_classInitializeCalled);
            Assert.AreEqual(_testCount, 2);
            Debug.Print("Tests completed: Tests run {0}", _testCount);
        }
    }
}

मेरे मामले में 32-बिट के रूप में 'रन टेस्ट' डिफ़ॉल्ट सेटिंग है; यह नीचे बदला जा सकता है -

  • वीएस2012 में: टेस्ट> टेस्ट सेटिंग्स> डिफ़ॉल्ट प्रोसेसर आर्किटेक्चर
  • VS2010 में समाधान एक्सप्लोरर 'सॉल्यूशन आइटम' पर राइट-क्लिक करें> जोड़ें> नया आइटम> टेस्ट सेटिंग्स, फिर,
  • VS2010 मुख्य मेनू> टेस्ट> टेस्ट सेटिंग्स संपादित करें> होस्ट> 32 बिट या 64 बिट प्रक्रिया में परीक्षण चलाएं

यदि आप 64-बिट का उपयोग करते हैं, तो [डेटा स्रोत ("CsvTestData64")] का उपयोग करें, और आपको MS Access 64-bit ODBC ड्राइवर को स्थापित करने की आवश्यकता हो सकती है। 32-बिट के साथ छड़ी करने का सबसे आसान तरीका है

app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </configSections>

  <microsoft.visualstudio.testtools>
    <dataSources>
      <add name="CsvTestData32" connectionString="CsvConn32" dataTableName="`TestList.csv`" dataAccessMethod="Sequential" />
      <add name="CsvTestData64" connectionString="CsvConn64" dataTableName="`TestTest.csv`" dataAccessMethod="Sequential" />
    </dataSources>
  </microsoft.visualstudio.testtools>

  <connectionStrings>
    <add name="CsvConn32" connectionString="Driver={Microsoft Text Driver (*.txt; *.csv)};.\;Extensions=csv;" providerName="System.Data.Odbc" />
    <add name="CsvConn64" connectionString="Driver={Microsoft Access Text Driver (*.txt, *.csv)};Dbq=.\;Extensions=csv" providerName="System.Data.Odbc" />
  </connectionStrings>
</configuration>

MSTestHacks मदद कर सकता है

यह आपके टेस्ट क्लास पर एक IEnumberable को आपकी IEnumberable रूप में उपयोग करने की अनुमति देता है।

वेबसाइट से:

रनटाइम डाटासॉरस

आपको अपने परीक्षण वर्ग को टेस्टबेस से प्राप्त करना होगा

[TestClass]
public class UnitTest1 : TestBase
{ }

एक संपत्ति, क्षेत्र या विधि बनाएँ, जो एक IEnumerable देता है

[TestClass]
public class UnitTest1 : TestBase
{
    private IEnumerable<int> Stuff
    {
        get
        {
            //This could do anything, fetch a dynamic list from anywhere....
            return new List<int> { 1, 2, 3 };
        }
    }
}

DataSource विशेषता को अपने परीक्षण पद्धति में जोड़ें, जो पहले बनाया गया IEnumerable नाम पर वापस इंगित करता है। इसे पूरी तरह से योग्य होना चाहिए

[TestMethod]
[DataSource("Namespace.UnitTest1.Stuff")]
public void TestMethod1()
{
    var number = this.TestContext.GetRuntimeDataSourceObject<int>();

    Assert.IsNotNull(number);
}




data-driven-tests