繁体   English   中英

C#自定义事件未触发

[英]C# Custom Event is not fired

我正在为Selenium Webdriver写一个简单的扩展库。 我有我的“包装”类WebDriverManager ,它定义事件委托如下:

    public delegate void OnStartEventHandler();
    public delegate void OnTerminateEventHandler();
    public delegate void OnCheckpointEventHandler();

    public event OnStartEventHandler OnStartTesting;
    public event OnTerminateEventHandler OnTerminateTesting;
    public event OnCheckpointEventHandler OnCheckpointTesting;

    /// <summary>
    /// Method that should be fired inside method with [OneTimeSetUp] attribute
    /// </summary>
    public void OnStart() { if (OnStartTesting != null) OnStartTesting(); }

    /// <summary>
    /// Method that should be fired inside method with [OneTimeTearDown] attribute
    /// </summary>
    public void OnTerminate() { if (OnTerminateTesting != null) OnTerminateTesting(); }

    /// <summary>
    /// Method that should be fired inside method with either [SetUp] or [TearDown] attribute
    /// </summary>
    public void OnCheckpoint() { if (OnCheckpointTesting != null) OnCheckpointTesting(); }

在我的目标项目中,添加对包含WebDriverManager类的库的引用,并编写一个简单的方法:

    [OneTimeSetUp]
    public void SetUp()
    {
        // wdmChrome and wdmFirefox are instances of WebDriverManager
        wdmChrome.OnStartTesting += () => { Console.WriteLine("Starting testing Chrome browser"); };
        wdmFirefox.OnStartTesting += () => { Console.WriteLine("Starting testing Firefox browser"); };

        wdmChrome.OnTerminateTesting += () => { Console.WriteLine("Terminating test of Chrome browser"); };
        wdmFirefox.OnTerminateTesting += () => { Console.WriteLine("Terminating test of Firefox browser"); };

        wdmChrome.OnStart();
        wdmFirefox.OnStart();
        // other stuff that initializes webdriver
    }

    [OneTimeTearDown]
    public void TearDown()
    {
        wdmChrome.OnTerminate();
        wdmFirefox.OnTerminate();
        wdmChrome.WebDriver.Close();
        wdmFirefox.WebDriver.Close();
    }

测试被正确触发并通过,但是在“输出”中没有来自委托的消息。 我还尝试按照Visual Studio的建议将OnStart()主体更改为OnStartTesting?.Invoke() ,但结果没有任何变化。 这是怎么回事?

如果测试的目的是检查事件是否被触发,则:

  1. 分开测试以单独检查每个Event
  2. 不要使用初始化方法注册事件。
  3. 不要在初始化方法中调用触发事件的代码。
  4. 您既需要注册该事件,又需要在专用的测试方法中触发引发该事件的代码。
  5. 如果您需要同时使用ChromeFirefox来测试代码,请将它们分开以进行不同的测试,那么您将具有针对Chrome OnStartTestingOnTerminateTesting测试以及针对Firefox OnStartTestingOnTerminateTesting
  6. 不要依赖于Console.WriteLine()为你的测试,而是尝试创建的测试方法,然后由匿名委托集中一个事件handelr特定事件,然后里面的标志Assert该值。

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM