首先,我希望您了解我知道99.9%的情况下不需要依赖的单元测试,但我认为这是0.1%。
情况是我正在研究一个基于selenium的网站自动化测试框架。我有方法来执行不同的操作,即。 logIntoSite(usersname,pass),createEvent(eventName,eventTime),deleteEvent(eventName)。
这就是问题,该功能显然需要网站正常运行,并且测试失败可能是我身边的问题或者它确定了网站问题。当存在站点问题时,他们可能会进行一些我们不希望运行的测试,因为它所依赖的站点的核心功能不起作用。
我现在正在研究的例子是,我有一个创建事件的功能,我还有一个删除事件的功能。
如果存在无法创建事件的站点问题,则第一次测试无法正确执行,但删除事件功能也会认为该功能没有任何问题。
这不是让每个测试都能自我维持的问题,因为删除功能不依赖于运行的创建“功能”,删除功能会创建一个删除自身的事件。
所以我离开了2次失败,当我想要的是1次失败并且因为失败而跳过一次测试。本身听起来不是很糟糕,但随着测试的增长,我们会越来越多地结束,即。 editEventName,updateEventTime ......等现在我有4次失败......我希望你能看到我的问题。
我目前正在使用Visual Studio与TestTools.UnitTesting;
答案 0 :(得分:1)
您可以在bool eventCanBeCreated
的测试类中创建属性,然后if (eventCanBeCreated)
,Assert.Inconclusive("The dependent test " + testName + "failed. Skipping this test");
。
这看起来像是:
public class TestClass
{
public bool eventCanBeCreated = true;
[TestMethod]
public void CreateEvent()
{
// Your code
// Before Assert.Fail():
eventCanBeCreated = false;
}
[TestMethod]
public void DeleteEvent()
{
if (!eventCanBeCreated)
Assert.Inconclusive("The dependent test " + testName + "failed. Skipping this test");
// Your code
}
}
从那里尝试强制在CreateEvent()
之前尝试DeleteEvent()
也是值得的,因为虽然这是不好的做法,但在这种情况下它会保证你不浪费时间跑您不需要的测试。
答案 1 :(得分:1)
Visual Studio中有一个解决方案。它被称为Ordered test。您可以通过右键单击测试项目并选择Add>来创建它。有序测试。
打开的对话框很直观。您可以将测试添加到列表并对其进行排序,并确定该组的测试执行是否应该因单个故障而停止。您可以将一个测试添加到多个组。您可以将一组测试添加到另一个组。
这将允许您使用测试开始测试组以验证网站是否加载,并且如果该测试失败则停止执行以下测试。您可以使用一组测试组,即使另一个组出现故障,每个组也会运行,但在较小的组中,故障会停止执行。因此,如果先决条件测试失败,则可以停止测试一个功能,但继续测试其他功能。
我从来没有用过这个,从未见过它,我也不知道它存在。但它可能只是你正在寻找的东西。对我来说,它只会在这样的情况下有用,在这种情况下,测试可能需要更长时间,如果某些先决条件确定其中许多可以保证失败,则跳过一些可能是有益的。