【问题标题】:xUnit and White test failure cleanupxUnit 和 White 测试失败清理
【发布时间】:2019-09-04 03:16:05
【问题描述】:

我开始考虑在 XUnit 中使用 White UI 测试。

我的测试的基本结构是

  • 打开应用程序
  • 测试一些东西
  • 关闭应用程序

当测试通过时,这非常有效。但是,当测试失败时,应用程序不会关闭。如果多个测试失败,这会导致我的应用程序打开很多实例。

为了解决这个问题,我使用了 try 和 finally 块,但这不是很好。

是否有替代选项可以实现相同的清理行为但看起来更好一些?像“RunOnAssertFail”方法?

[Fact]
public void MainWindowCreated()
{
    bool testFailed = false;

    Application application = Application.Launch(@"C:\Program\Program.exe");
    Window mainWindow = GetWindow(application, "MainWidndow", 500);

    try
    {
        testFailed = true;
        mainWindow.Should().NotBe(null, ". Main Widndow could not be found");
        testFailed = false;
    }
    finally
    {
        if (testFailed)
        {
            application.Close();
        }
    }

    /*
     * Rest of test case
     */

    application.Close();
}

private static Window GetWindow(Application application,
    string windowName,
    int timeoutAfterMilliseconds)
{
    Window window = null;

    try
    {
        window = Retry.For(
            () => application.GetWindows().First(
                windowX => windowX.Title.Trim().Equals(windowName.Trim())),
            TimeSpan.FromMilliseconds(timeoutAfterMilliseconds));
    }
    catch (InvalidOperationException)
    {

    }

    return window;
}

需要xUnitWhiteFluent Assertions 才能运行。

【问题讨论】:

    标签: c# xunit white-framework fluent-assertions


    【解决方案1】:

    在玩了之后,我意识到断言是它抛出异常而不是实际断言。

    因此,为了帮助整理,try catch 块更合适

    try
    {
        mainWindow.Should().NotBeNull("because this window is required for the rest of the test");
    }
    catch(XunitException)
    {
        application.Close();
        throw;
    }
    

    但是,这仍然不理想。

    【讨论】:

    • 尝试... finally 块也可能有用。无论特定异常如何,都可以确保清理代码运行。
    【解决方案2】:

    如何在您的测试类上实现IDisposable 并使用它来清理?

    【讨论】:

    • 我想过这个问题,我的问题是根据测试的位置,清理可能会有所不同。例如,如果测试涉及向数据库添加信息,以查看它是否被列出,那么在删除数据之前出现问题,清理将涉及删除该数据。这通常会在测试中完成,但它会在到达那里之前停止。使用 IDisposable 会假设每次测试的清理工作都是相同的,不幸的是,情况通常并非如此。
    • 你也可以考虑试试chillbdd.com。它是一个 BDD 风格的小框架,可以更轻松地清理测试。在chillbdd.com/documentation/#before-and-after查看入门指南
    猜你喜欢
    • 2020-03-23
    • 2019-11-21
    • 2021-04-12
    • 2010-11-11
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    相关资源
    最近更新 更多