编程中的夹具是什么?


Answers:


193

我认为您指的是测试装置

测试夹具的目的是确保在众所周知的固定环境中进行测试,以便结果可重复。有人将此称为测试上下文。

固定装置示例:

  • 用一组已知的特定数据加载数据库
  • 擦除硬盘并安装已知的全新操作系统安装
  • 复制一组特定的已知文件
  • 准备输入数据以及设置/创建伪造或模拟对象

(来源:维基百科,请参见上面的链接)

这也是“ Google测试”框架文档中的一些实用示例


13

我认为PHP单元测试对此有很好的解释:

编写测试中最耗时的部分之一是编写代码以将世界设置为已知状态,然后在测试完成后将其返回到原始状态。这种已知状态称为测试夹具。

Yii文件还描述了灯具测试的良好状态:

自动化测试需要执行多次。为了确保测试过程是可重复的,我们希望在一种称为夹具的已知状态下运行测试。例如,要测试博客应用程序中的帖子创建功能,每次我们运行测试时,存储有关帖子的相关数据的表(例如,帖子表,评论表)应恢复到某个固定状态。

这里是夹具测试的简单例子

<?php
use PHPUnit\Framework\TestCase;

class StackTest extends TestCase
{
    protected $stack;

    protected function setUp()
    {
        $this->stack = [];
    }

    protected function tearDown()
    {
        $this->stack = [];
    }

    public function testEmpty()
    {
        $this->assertTrue(empty($this->stack));
    }

    public function testPush()
    {
        array_push($this->stack, 'foo');
        $this->assertEquals('foo', $this->stack[count($this->stack)-1]);
        $this->assertFalse(empty($this->stack));
    }

    public function testPop()
    {
        array_push($this->stack, 'foo');
        $this->assertEquals('foo', array_pop($this->stack));
        $this->assertTrue(empty($this->stack));
    }
}
?>

这个PHP单元测试与功能名称setUptearDown该运行测试你的设置数据前和结束后可以将其恢复到初始状态。


6

术语“夹具”根据上下文,编程语言或框架而有所不同。

1.测试运行的已知状态

编写测试中最耗时的部分之一是编写代码以将环境设置为已知状态,然后在测试完成后将其恢复为原始状态。这种已知状态称为测试夹具。 PHP-Unit文档

测试装置(也称为测试上下文)是运行测试所需的一组前提条件或状态。开发人员应在测试之前建立一个已知的良好状态,并在测试之后返回到原始状态。 维基百科(xUnit)

2.包含样本数据的文件

夹具是样本数据的花哨词。夹具允许您在测试运行之前用预定义的数据填充测试数据库。夹具是独立于数据库的,并使用YAML编写。每个模型只有一个文件。 RubyOnRails.org

3.设置所需状态的过程。 

软件测试装置通过向系统提供所有必要的代码来初始化它,从而为测试过程设置了系统,从而满足了可能存在的任何先决条件。例如,可以在运行测试之前从客户站点加载具有已知参数的数据库。 维基百科


5

正是针对该主题,JUnit的文档讲得很清楚。这里是链接!

本文的相关部分是:

测试需要在一组已知对象的背景下进行。这组对象称为测试夹具。编写测试时,通常会发现比编写实际测试值花费更多的时间来编写代码来设置夹具。

在某种程度上,您可以通过仔细注意所编写的构造函数来简化编写夹具代码的过程。但是,共享夹具代码可以节省更多的钱。通常,您将能够使用相同的夹具进行多种不同的测试。每个案例将向灯具发送稍有不同的消息或参数,并检查不同的结果。

当您拥有通用夹具时,您可以执行以下操作:

为灯具的每个部分添加一个字段用@ org.junit注释一个方法,然后在该方法中初始化变量用@ org.junit注释一个方法。之后释放在setUp中分配的任何永久资源例如,编写要使用12瑞士法郎,14瑞士法郎和28美元的不同组合的几个测试用例,首先创建一个夹具:

public class MoneyTest {
    private Money f12CHF;
    private Money f14CHF;
    private Money f28USD;

    @Before public void setUp() {
    f12CHF= new Money(12, "CHF");
    f14CHF= new Money(14, "CHF");
    f28USD= new Money(28, "USD");
    }
}

2

在Xamarin.UITest中,其解释如下:

通常,每个Xamarin.UITest被编写为一种称为测试的方法。包含测试的类称为测试夹具。测试夹具包含单个测试或逻辑分组的测试,并负责进行测试运行的任何设置以及测试完成后需要执行的任何清理。每个测试都应遵循“安排-行为-声明”模式:

  • 安排–测试将设置条件并初始化事物,以便可以执行测试。
  • 行动–测试将与应用程序交互,输入文本,按按钮等。
  • 断言–测试检查在“步骤”步骤中执行的操作的结果,以确定正确性。例如,应用程序可以验证是否显示了特定的错误消息。

以上摘录原文的链接

在Xamarin.UITest代码中,它看起来如下所示:

using System;
using System.IO;
using System.Linq;
using NUnit.Framework;
using Xamarin.UITest;
using Xamarin.UITest.Queries;

namespace xamarin_stembureau_poc_tests
{
    [TestFixture(Platform.Android)]
    [TestFixture(Platform.iOS)]
    public class TestLaunchScreen
    {
        IApp app;
        Platform platform;

        public Tests(Platform platform)
        {
            this.platform = platform;
        }

        [SetUp]
        public void BeforeEachTest()
        {
            app = AppInitializer.StartApp(platform);
        }

        [Test]
        public void AppLaunches()
        {
            app.Screenshot("First screen.");
        }

        [Test]
        public void LaunchScreenAnimationWorks()
        {
            app.Screenshot("Launch screen animation works.");
        }
    }
}

希望这对寻求更好地了解《编程治具》的人可能有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.