Как использовать Class initialize и Class Cleanup только один раз в рамках прохождения тестового контекста - PullRequest
1 голос
/ 28 апреля 2020

Я интегрировал протокол 4net и отчеты по экстентам вместе для регистрации. Я хотел передать имя метода тестирования в качестве имени файла журнала, поэтому для того, чтобы сделать это, я передавал контекст теста в методе Class Initialize перед каждым запуском теста.

скрипт выглядит так:

    [TestClass]
    public class ToverifySequenceProperty : BaseSetup
    {
        BaseSetup baseobj = new BaseSetup();
        BaseDeveloper_CF devobj = new BaseDeveloper_CF();
       // public TestContext TestContext { get; set; }
       // public static string logfilename;


        [TestMethod]
        public void VerifySequenceProperty()
        {
            try
            {

                baseobj.LocateParentWindowbyName("SystemModeler17 - Microsoft Visual Studio  (Administrator)");
                htmlLogging.HTMLReportLogging("Info", "Prent Window Located Successfully");
                var projectnode = "SystemModeler17 [(OS 2200) Standard mode] on SystemModeler17";
                devobj.AddElement(projectnode, "Folder", "fol1");
                htmlLogging.HTMLReportLogging("Info", "Element Added Successfully");
                devobj.AddElement("fol1", "Segment", "seg1");
                htmlLogging.HTMLReportLogging("Info", "Element Added Successfully");
                devobj.AddElement("seg1", "Ispec", "ispec1");
                htmlLogging.HTMLReportLogging("Info", "Element Added Successfully");
                devobj.AddElement("ispec1", "Attribute", "Attribute1");
                htmlLogging.HTMLReportLogging("Info", "Element Added Successfully");
                devobj.AddElement("ispec1", "Attribute", "Attribute2");
                htmlLogging.HTMLReportLogging("Info", "Element Added Successfully");
                devobj.AddElement("ispec1", "Attribute", "Attribute3");
                htmlLogging.HTMLReportLogging("Info", "Element Added Successfully");
                devobj.DeleteElement("Attribute1");
                htmlLogging.HTMLReportLogging("Info", "Element Deleted Successfully");
                devobj.CheckSequenceError();
                htmlLogging.HTMLReportLogging("Info", "Sequence error checked Successfully");
                devobj.ResolveSequenceError("ispec1");
                htmlLogging.HTMLReportLogging("Info", "Sequence Error Resolved Successfully");
            }
            catch (Exception ex)
            {
                htmlLogging.HTMLReportLogging("Error", ex.ToString());
            }

        }

        [ClassInitialize]
        public static void ClassInitialize(TestContext context)
        {
            test = extent.CreateTest($"{context.TestName}");
            logfilename = $"{context.TestName}";
            Setup();
        }

        [ClassCleanup]
        public static void ClassCleanup()
        {
            TearDown();
            Directory.CreateDirectory(@"C:\LogFiles");
            File.Move(@"C:\temp\default.log", @"C:\LogFiles\" + logfilename + ".log");

        }
    }

Теперь я добавляю этот метод инициализации класса и очистки класса во все файлы тестовых классов. Есть ли способ, которым я могу использовать это только один раз, и он автоматически запускается для каждого тестового класса. Я попытался сделать конструктор в классе BaseSetup, но тогда контекст там нулевой. Как пройти тестовый контекст тестовых классов, я не получаю эту часть.

...