Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建具有依赖关系的单元测试_C#_Unit Testing_Selenium_Automation - Fatal编程技术网

C# 如何创建具有依赖关系的单元测试

C# 如何创建具有依赖关系的单元测试,c#,unit-testing,selenium,automation,C#,Unit Testing,Selenium,Automation,首先,我想让你们明白,我知道在99.9%的情况下,不需要依赖性的单元测试,但我认为这是0.1% 目前的情况是,我正在为一个网站开发一个基于硒的自动化测试框架。我有一些方法可以执行不同的操作,比如logIntoSite(usersname,pass)、createEvent(eventName,eventTime)、deleteEvent(eventName) 这是一个问题,功能显然需要站点正确运行,测试失败可能是我这边的问题,或者它确定了站点问题。当有一个网站的问题,他们可能会有一些测试,我们不

首先,我想让你们明白,我知道在99.9%的情况下,不需要依赖性的单元测试,但我认为这是0.1%

目前的情况是,我正在为一个网站开发一个基于硒的自动化测试框架。我有一些方法可以执行不同的操作,比如logIntoSite(usersname,pass)、createEvent(eventName,eventTime)、deleteEvent(eventName)

这是一个问题,功能显然需要站点正确运行,测试失败可能是我这边的问题,或者它确定了站点问题。当有一个网站的问题,他们可能会有一些测试,我们不希望运行的核心功能的网站,它所依赖的是不工作

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

如果存在无法创建事件的站点问题,则第一次测试会正确失败,但删除事件功能也会失败,即使该功能可能没有任何问题

这不是让每个测试自我维持的问题,因为delete函数不依赖create“function”来运行,delete函数会创建一个事件来删除自己

所以我留下了两次失败,而我想要的是一次失败和一次因为失败而跳过的测试。就其本身而言,这听起来并不糟糕,但随着测试的增长,我们最终会遇到越来越多的问题,如editEventName、updateEventTime。。。等等。现在我有4次失败。。。我希望你能看到我的问题


我目前正在使用visual studio和TestTools.UnitTesting

您可以在
bool eventCanBeCreated
的测试类中创建属性,然后
if(eventCanBeCreated)
Assert.Inconclusive(“依赖测试”+testName+“失败。跳过此测试”)

这看起来像:

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
    }
}

从这里开始,尝试在
DeleteEvent()
之前执行
CreateEvent()
也是值得的,因为尽管这是一种不好的做法,但它可以保证在这种情况下,您不会浪费时间运行不需要的测试。

Visual Studio中有一种解决方案。这叫一个。您可以通过右键单击测试项目并选择Add>Ordered test来创建它

打开的对话框是直观的。您可以将测试添加到列表中并对其排序,并确定组的测试执行是否应在单个失败时停止。可以将一个测试添加到多个组。您可以将一组测试添加到另一组

这将允许您以一个测试开始一个测试组,以验证站点是否加载,并在该测试失败时停止执行以下测试。您可以创建一个测试组集合,其中每个组都将运行,即使不同的组失败,但在较小的组中,失败会停止执行。因此,如果先决条件测试失败,对一个特性的测试可能会停止,但对其他特性的测试仍在继续


我从来没有用过这个,从来没有见过它被使用过,我也不知道它的存在。但这可能正是你想要的。对我来说,它只在这样的场景中有用,在这种场景中,测试可能需要更长的时间,如果某个前提条件确定其中许多测试肯定会失败,那么跳过一些测试可能是有益的

这些不是单元测试。它们是集成测试。集成测试将测试整个系统的行为,而不是特定的块(尽管可能有多个集成测试涵盖不同的功能,但它们的范围将比单元测试大得多)。。。。在99.9%的情况下,不需要依赖性的单元测试——这是不正确的。我希望有测试我的应用程序的整个“管道”的测试(端到端测试)——然后我将有重构的自由,适应新的方法,这些方法可以在我开始开发软件后发现。但问题是这种测试非常慢(UI、web服务、文件系统)。@Fabio那么它不是单元测试。单元测试将单独测试特定的代码段。您将直接在测试中设置所有依赖项,并且测试将与任何其他测试的结果完全隔离。如果您的测试跨越多个功能部件,并且相互依赖,那么这些测试就是集成测试。是的,它们通常使用单元测试工具。但是,当与其他开发人员在诸如Stack Overflow之类的网站上交流时,使用正确的术语是很重要的,这样您就不会被误解。@mason,您在技术上是正确的,但我要处理的是这两种测试类型之间的灰色地带。我开发了用于集成测试的框架,但是功能本身需要单独测试。因此,我的测试在本质上更接近于单元测试,但在功能上更像是集成测试,因为它们无法访问下划线代码。从您的描述来看,这可能是我的最佳选择。今天我将尝试一下,看看效果如何。这是一种可能性。唯一令人担忧的是,随着测试和依赖项数量的增加,会出现大量丑陋的变量列表,但这是可行的。这是一种风险。如果你有那么多的依赖关系,我建议你看看是否真的需要多次测试完全相同的特性。也就是说,不要使用普通的测试框架,而是使用一个单独的测试编辑/更新/etc,创建一个单事件测试,然后记录到一个控制台或一个外部文件。这将大大减少您的测试运行时间,如果它是一个真正的程序,那么您可以集成更好的逻辑。如果这是集成测试本身,那么这将是最好的,但是这些是针对函数本身的测试,其他人用于为集成测试创建测试脚本。例如,他们有一个测试用例,即让某人注册该事件。所以他们使用这个函数