编程中有什么固定装置?

时间:2012-08-22 10:42:15

标签: fixtures ui-testing uitest test-fixture

之前我曾多次听过这个术语(谈论编程时),但找不到任何解释是什么意思。有什么好的文章或解释吗?我没有找到任何值得一提的东西。

6 个答案:

答案 0 :(得分:129)

我认为你指的是test fixtures

  

测试夹具的目的是确保众所周知   和运行测试的固定环境,以便得到结果   重复。有些人称之为测试环境。

     

灯具示例:

- Loading a database with a specific, known set of data
- Erasing a hard disk and installing a known clean operating system installation
- Copying a specific known set of files
- Preparation of input data and set-up/creation of fake or mock objects

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

这里还有一些practical examples from the documentation of the 'Google Test' framework

答案 1 :(得分:9)

我认为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的函数,在运行测试之前,您可以设置数据,并且在完成后可以将它们恢复到初始状态。

答案 2 :(得分:3)

正是对于那个主题,JUnit有一个很好解释的文档。 Here是链接!

文章的相关部分是:

  

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

     

在某种程度上,您可以通过仔细关注您编写的构造函数来更轻松地编写fixture代码。但是,共享夹具代码可以节省更多。通常,您可以使用相同的夹具进行多种不同的测试。每个案例都会向灯具发送略有不同的消息或参数,并会检查不同的结果。

     

如果你有一个共同的夹具,这就是你要做的:

     

为灯具的每个部分添加一个字段   使用@ org.junit.Before注释方法并初始化该方法中的变量   使用@ org.junit.After注释方法以释放您在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");
    }
}

答案 3 :(得分:3)

“固定装置”一词根据上下文,编程语言或框架而有所不同。

1。测试所针对的已知状态

  

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

     

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

2。包含示例数据的文件

  

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

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

  

软件测试装置通过以下步骤为测试过程设置系统   向其提供所有必要的代码以对其进行初始化,从而   满足可能存在的任何前提条件。一个例子可能是   从客户站点加载具有已知参数的数据库   在运行测试之前。   Wikipedia

答案 4 :(得分:1)

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

  

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

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

Link for original article of the above Excerpt

在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.");
        }
    }
}

希望这对寻求更好地了解编程夹具的人可能有用。

答案 5 :(得分:1)

我正在为自己写这个答案,以快速了解什么是“灯具”。

相同数据多次测试

测试装置:对多个测试使用相同的数据配置 如果发现自己编写了两个或多个对相似数据进行测试的测试,则可以使用测试夹具。这样,您就可以将对象的相同配置重新用于几个不同的测试。

您可以在googletest

阅读更多内容

夹具可以用于集成测试或开发期间(假设ui开发中的数据来自开发数据库

假冒用户进行数据库或测试

myproject / fixtures / my_fake_user.json

[
  {
    "model": "myapp.person",
    "pk": 1,
    "fields": {
      "first_name": "John",
      "last_name": "Lennon"
    }
  },
  {
    "model": "myapp.person",
    "pk": 2,
    "fields": {
      "first_name": "Paul",
      "last_name": "McCartney"
    }
  }
]

您可以从Django docs中阅读更多内容