xUnit 和 White 测试失败清理

Posted

技术标签:

【中文标题】xUnit 和 White 测试失败清理【英文标题】:xUnit and White test failure cleanup 【发布时间】: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;


需要xUnit、White 和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查看入门指南

以上是关于xUnit 和 White 测试失败清理的主要内容,如果未能解决你的问题,请参考以下文章

DBUnit 在每个方法之后都没有清理和插入数据库,所以测试不是独立的

SVN更新失败,清理操作后更新依然会更新失败;

由于缺少依赖项,MSBuild 清理操作失败

当前测试用例成功/失败

如何解决svn清理失败 不能更新 cleanup失败 cleanup乱码 更新乱码 svn更新提示清理 清理乱码不能清理 svn故障修复SVN cleanup 陷入死循环 svn cleanup时遇

TortoiseSVN--clearup清理失败解决办法