当前位置: 首页 > 面试题库 >

NUnit Specflow如何为所有测试共享一个类实例

端木兴国
2023-03-14
问题内容

我将Specflow与NUnit和Selenium结合使用,并希望在所有测试中共享驱动程序实例。我可以使用FeatureContext达到功能级别,但是看不到所有测试的任何内容。我知道这可能不是正确的方法,但我想知道是否有办法。

请帮助提供示例。

谢谢


问题答案:

有几种方法可以做到这一点。此页面涵盖了大多数

我个人可能要做的是定义一个SeleniumContext类,并在所有Step类的构造函数中都需要该类,然后告诉SpecFlow的IOC在每种情况下都使用相同的实例:

首先创建用于保存硒驱动程序实例的类

public class SeleniumContext
{
     public SeleniumContext()
     {
          //create the selenium context
          WebDriver = new ...create the flavour of web driver you want
     }

     public IWebDriver WebDriver{get; private set;} 
}

然后将IOC设置为每次返回相同的实例

[Binding]
public class BeforeAllTests
{
    private readonly IObjectContainer objectContainer;
    private static SeleniumContext seleniumContext ;

    public BeforeAllTests(IObjectContainer container)
    {
        this.objectContainer = container;
    }

    [BeforeTestRun]
    public static void RunBeforeAllTests()
    {
        seleniumContext = new SeleniumContext();
     }

    [BeforeScenario]
    public void RunBeforeScenario()
    {            
        objectContainer.RegisterInstanceAs<SeleniumContext>(seleniumContext );
    }
}

然后确保您的步骤类始终在其构造函数中要求上下文(您需要在每个步骤类中都执行此操作)

[Bindings]
public class MySteps
{
    private SeleniumContext seleniumContext;

    public MyClass(SeleniumContext seleniumContext)
    {
         //save the context so you can use it in your tests
         this.seleniumContext = seleniumContext;
    }

    //then just use the seleniumContext.WebDriver in your tests
}

或者,如果您已经将实例存储在功能上下文中,则可以使用BeforeFeature挂钩保存相同的实例:

[Binding]
public class BeforeAllTests
{
    private static WebDriver webDriver;

    [BeforeTestRun]
    public static void RunBeforeAllTests()
    {
        webDriver = new WebDriver();
     }

    [BeforeFeature]
    public static void RunBeforeFeature()
    {
        FeatureContext["WebDriver"] = webDriver;
     }

}


 类似资料:
  • 当单元测试共享首选项时,值是否为get refresh every test?

  • 问题内容: 当前,我所有的JUnit测试都从一个通用的基类扩展而来,该基类提供了带有和标记的方法 -真正要做的就是设置一堆静态资源/服务以供测试使用。 由于某些原因,这对我来说似乎很尴尬: 根据我的理解,JUnit4的部分要点是我们不再需要这种经典的测试继承。 当我将这些测试作为套件的一部分而不是单独运行(我们经常这样做)时,多次调用和,从而减慢了测试的速度-我们实际上应该只调用一次 我想做的是以

  • 我正在努力理解使用的好处。文档和其他帖子(Junit@Rule是如何工作的?)所有这些都暗指能够在类内的测试之间共享代码和/或在测试类之间共享代码。 在功能/集成测试中,我试图使用进行DB连接,但我不知道如何跨类共享该连接。事实上,在这种情况下,我并没有看到比有什么好处。我是不是用错了,还是我遗漏了什么?

  • 问题内容: 我想有一个header.html,它定义我所有网页的标题如何。如何将此header.html插入顶部的其他网页? 可能会有更好的方法来实现要共享的公共标头。由于我仍然认为自己是html的新手(但不适合编程),因此我愿意接受更好的建议。 谢谢。 编辑:有用的答复提到了使用PHP。但是,我使用AngularJS作为前端,而我的PHP后端仅仅是一个纯REST服务器。我更喜欢用AngularJ

  • 我想创建一个随机的int值,在多个类中使用。每次创建这些类的一组新实例时,我都希望对所有这些类使用一个新的随机int值。不过,随机值应该是相同的。 简而言之,我希望创建一个随机索引,并在多个共同生成数据的类中使用。 这个随机值是否应该在堆栈的顶部生成,并在一起工作的每个类中静态调用?

  • 我有一个这样格式化的TestNG xml文件: 问题是:在test-output下名为junitreports的目录中,每个类都有一个junit报告,格式如下: 其中套件名与类名相同。我如何只获得一个带有一组TestNG测试结果的Junit报告文件?