xUnit和White测试失败清除

时间:2019-04-13 15:39:44

标签: c# xunit white fluent-assertions

我开始研究在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

2 个答案:

答案 0 :(得分:0)

在玩耍之后,我意识到断言是引发异常而不是实际断言。

因此,为了帮助整理它,尝试catch块更合适

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

但是,这仍然不理想。

答案 1 :(得分:0)

在测试类上实现IDisposable并将其用于清理该怎么办?