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