如何创建具有依赖项的单元测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建具有依赖项的单元测试相关的知识,希望对你有一定的参考价值。

首先,我希望您了解我知道在99.9%的情况下不需要依赖的单元测试,但我认为这是0.1%。

我正在研究一个基于selenium的网站自动化测试框架。我有方法来执行不同的操作,即。 logIntoSite(usersname,pass),createEvent(eventName,eventTime),deleteEvent(eventName)。

以下是该功能明显需要网站正常运行的问题,测试失败可能是我身边的问题或者它确定了网站问题。当存在站点问题时,它们可能是一些我们不希望作为其所依赖的站点的核心功能运行的测试不起作用。

我现在正在处理的例子是,我有一个创建事件的函数,我还有一个删除事件的函数。

如果存在无法创建事件的站点问题,则第一个测试会无法正确执行,但删除事件函数也会认为该功能可能没有任何问题。

这不是每个测试都能自我维持的问题,因为删除功能不依赖于创建“功能”来运行,删除功能确实创建了一个删除自身的事件。

所以我离开了2次失败,当我想要的是1次失败并且因为失败而跳过一次测试。本身听起来不是很糟糕,但随着测试的增长,我们会越来越多地结束,即。 editEventName,updateEventTime ...等现在我有4次失败......我希望你能看到我的问题。

我目前正在使用带有TestTools.UnitTesting的visual studio;

答案

在Visual Studio中有一个解决方案。它被称为Ordered test。您可以通过右键单击测试项目并选择“添加”>“有序测试”来创建它。

打开的对话框非常直观。您可以将测试添加到列表并对其进行排序,并确定该组的测试执行是否应该因单个故障而停止。您可以将一个测试添加到多个组。您可以将一组测试添加到另一个组。

这将允许您使用测试开始测试组以验证站点加载,并且如果该测试失败则停止执行以下测试。您可以使用一组测试组,即使另一个组出现故障,每个组也会运行,但在较小的组中,故障会停止执行。因此,如果先决条件测试失败,则可以停止测试一个功能,但继续测试其他功能。

我从来没有用过它,从未见过它,我不知道它存在。但它可能正是你所寻找的。对我来说,它只会在这样的情况下有用,在这种情况下,测试可能需要更长时间,如果某些先决条件确定其中许多可以保证失败,则跳过一些可能是有益的。

另一答案

您可以在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()之前被尝试也是值得的,因为尽管这是不好的做法,但在这种情况下它会保证你不会浪费时间运行你不需要的测试。

以上是关于如何创建具有依赖项的单元测试的主要内容,如果未能解决你的问题,请参考以下文章

在 Java Play 2.4 中测试具有模拟依赖项的控制器

如何创建具有基本依赖项的 deb 包?

单元测试-桩对象

从类中分解所有依赖项的最简单、最快的方法

具有依赖项的 Maven2 + JMeter + JUnit

如何使用 Gradle 创建具有实现依赖项的可执行胖 jar