среда, 27 ноября 2013 г.

Распараллеливание DDT (Data Driven Tests) в Unit Testing

На просторах инета я не нашел решения "как распараллелить DDT в Unit Testing", нашел только информацию, что Microsoft не реализовало данную возможность в Visual Studio 2010.
Так что пришлось выкручиваться.

Вот рабочий пример DDT, распараллеленный на 4 потока.
Создаем TestsMultiThread.csv файл
Вот код для обработки данного файла:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
 
namespace Wireless.Tests
{
    [TestClass]
    public class TestTry 
    {
        [TestClass]
        public class TestsCoupons 
        {
            public TestContext TestContext { getset; }
 
            [TestCleanup]
            public void StopTest()
            {
            }
 
            [TestInitialize]
            public void StartTest()
            {
            }
 
            [ClassInitialize]
            public static void StartTests(TestContext context)
            {
            }
 
            private void ExecuteTest(int thread)
            {
                var threadcfg = Convert.ToInt16(TestContext.DataRow["Thread"]);
                if (threadcfg != thread)
                    Assert.Inconclusive("Test not executed");
                var var1 = Convert.ToInt16(TestContext.DataRow["Var1"]);
                var var2 = Convert.ToInt16(TestContext.DataRow["Var2"]);
                var expResut = Convert.ToInt16(TestContext.DataRow["Result"]);
                Assert.AreEqual(expResut, var1 + var2);
 
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread1()
            {
                ExecuteTest(1);
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread2()
            {
                ExecuteTest(2);
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread3()
            {
                ExecuteTest(3);
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread4()
            {
                ExecuteTest(4);
            }
        }
    }
}

При запуске TestControler распараллеливает  4 метода на 4 виртуальные машины.
Вот результат запуска:
Поток 1

Поток 2

Комментариев нет:

Отправить комментарий