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清理失败 不能更新 cleanup失败 cleanup乱码 更新乱码 svn更新提示清理 清理乱码不能清理 svn故障修复SVN cleanup 陷入死循环 svn cleanup时遇