C# 每次测试都会调用OneTimesetup,我认为OneTimesetup就像BeforeSuite、TestNG注释一样

C# 每次测试都会调用OneTimesetup,我认为OneTimesetup就像BeforeSuite、TestNG注释一样,c#,nunit,winium,C#,Nunit,Winium,在Nunit C#中,我尝试只打开一次应用程序并对其进行修改,例如,我创建了记事本应用程序的演示。在我的实时项目中,我只需登录应用程序一次,执行所有100个测试用例,然后关闭桌面应用程序。请告诉我我做错了什么,非常感谢!顺便说一句,我是C的新手# ---第一次测试--- ----第二个测试类-- 从文档中,在TestFixture中的所有测试之前调用一次。您的示例有两个装置,因此设置被调用两次。您需要在同一夹具中进行所有测试 此行为不同于旧的[Setup]on属性,该属性对命名空间中的所有测试运

在Nunit C#中,我尝试只打开一次应用程序并对其进行修改,例如,我创建了记事本应用程序的演示。在我的实时项目中,我只需登录应用程序一次,执行所有100个测试用例,然后关闭桌面应用程序。请告诉我我做错了什么,非常感谢!顺便说一句,我是C的新手#

---第一次测试---

----第二个测试类--

从文档中,在TestFixture中的所有测试之前调用一次。您的示例有两个装置,因此设置被调用两次。您需要在同一夹具中进行所有测试

此行为不同于旧的[Setup]on属性,该属性对命名空间中的所有测试运行一次。

来自文档,在TestFixture中的所有测试之前调用一次。您的示例有两个装置,因此设置被调用两次。您需要在同一夹具中进行所有测试


此行为与旧的[Setup]on属性不同,该属性对命名空间中的所有测试运行一次。

关于
SetUpFixture
,第一个答案不正确

SetUpFixture
的工作方式与它一直以来的工作方式完全相同。如果您有一个
SetUpFixture
,它是
OneTimeSetUp
onetimeeardown
方法将对同一命名空间下的所有fixture运行一次

另一方面,在
TestFixture
中,
OneTimeSetUp
onetimeeardown
方法只对fixture本身运行一次

换句话说,这些方法在使用它们的特定范围(命名空间或fixture)内“一次性”运行

问题是,您使用的类与都是
SetUpFixture
的类,并且是所有
testfixture
的基类。这意味着,如果您有
n
测试夹具,它将运行
n+1
次!这就是你所看到的

setupfixture
与fixture继承没有任何关系。您应该使类成为
SetUpFixture
TestFixture
基类。如果出于任何原因,您都需要这两个类,那么使用两个类。在这种情况下,您只需要
SetUpFixture
,而不需要继承

何时从基类继承:当您希望相同的代码执行多次时,每个fixture执行一次。请注意,当以这种方式用于一次性设置和拆卸时,基类通常应而不是标记为TestFixture

何时使用SetUpFixture:当您希望某些代码只执行一次,在每个fixture运行之前,以及在所有fixture运行之后执行一次

在您的示例中,使用SetUpFixture来控制初始化的计时。您正在使用继承来共享驱动程序。问题是基类中的OneTimeSetUp实际上是每个测试夹具的一部分,您不希望这样

我会担心大约一百个测试都使用同一个驱动程序。我见过一些人在每个测试中使用一个驱动程序,而另一些人在每个测试中使用一个驱动程序。使用一个表示“一切”意味着您非常小心,每次测试都会在测试结束后进行清理,并将驱动程序恢复到相同的状态。我怀疑这是可能的

但是,作为一项练习,如果您真的想: 1.有一个基类,除了驱动程序成员之外什么都没有。 2.从基类派生SetUpFixture并在那里创建/销毁驱动程序。
3.从同一基类派生TestFixture。他们使用但不更改驱动程序。

关于
SetUpFixture
,第一个答案不正确

SetUpFixture
的工作方式与它一直以来的工作方式完全相同。如果您有一个
SetUpFixture
,它是
OneTimeSetUp
onetimeeardown
方法将对同一命名空间下的所有fixture运行一次

另一方面,在
TestFixture
中,
OneTimeSetUp
onetimeeardown
方法只对fixture本身运行一次

换句话说,这些方法在使用它们的特定范围(命名空间或fixture)内“一次性”运行

问题是,您使用的类与都是
SetUpFixture
的类,并且是所有
testfixture
的基类。这意味着,如果您有
n
测试夹具,它将运行
n+1
次!这就是你所看到的

setupfixture
与fixture继承没有任何关系。您应该使类成为
SetUpFixture
TestFixture
基类。如果出于任何原因,您都需要这两个类,那么使用两个类。在这种情况下,您只需要
SetUpFixture
,而不需要继承

何时从基类继承:当您希望相同的代码执行多次时,每个fixture执行一次。请注意,当以这种方式用于一次性设置和拆卸时,基类通常应而不是标记为TestFixture

何时使用SetUpFixture:当您希望某些代码只执行一次,在每个fixture运行之前,以及在所有fixture运行之后执行一次

在您的示例中,使用SetUpFixture来控制初始化的计时。您正在使用继承来共享驱动程序。问题是基类中的OneTimeSetUp实际上是每个测试夹具的一部分,您不希望这样

我会担心大约一百个测试都使用同一个驱动程序。我见过一些人
using NUnit.Framework;
using OpenQA.Selenium.Remote;
using System;
using OpenQA.Selenium;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace Notepad
{ }
    [SetUpFixture]
    public class BaseClass

    {
        public static IWebDriver driver;

        [OneTimeSetUp]
        public static void AssemblyInitalize()
        {
            var dc = new DesiredCapabilities();
            dc.SetCapability("app", @"C:\\Windows\\System32\\notepad.exe");
            driver = new RemoteWebDriver(new Uri("http://localhost:9999"), dc);
            Thread.Sleep(5000);
        }

        [OneTimeTearDown]
        public static void oneTearDown()
        {
            driver.FindElement(By.Id("Close")).Click();

        }
    }
namespace Notepad
{    [TestFixture]
    public class Notepad2:BaseClass
    {

        [Test]
     public void test2()
        {
            driver.FindElement(By.Id("15")).SendKeys("My Teacher ");
        }

    }
}
 using NUnit.Framework;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using OpenQA.Selenium;

    namespace Notepad 
    {    [TestFixture]
      public  class NoteTest : BaseClass

        {


            [Test]
            public void Test()
            {

                driver.FindElement(By.Id("15")).SendKeys("...is Coming now");
            }
        }
    }