【问题标题】:What are fixtures in programming?编程中的固定装置是什么?
【发布时间】:2023-03-07 13:53:02
【问题描述】:

我多次听说过这个术语(在编程环境中),但找不到任何解释它的含义。有什么好的文章或解释吗?

【问题讨论】:

    标签: fixtures ui-testing uitest test-fixture


    【解决方案1】:

    我想你指的是test fixtures

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

    夹具示例:

    • 使用特定的已知数据集加载数据库
    • 擦除硬盘并安装已知干净的操作系统安装
    • 复制一组特定的已知文件
    • 输入数据的准备和假或模拟对象的设置/创建

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

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

    【讨论】:

      【解决方案2】:

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

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

      Yii 文档也描述了夹具测试的良好状态:

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

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

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

      【讨论】:

        【解决方案3】:

        fixture 一词因上下文、编程语言或框架而异。

        1.运行测试的已知状态

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

        测试夹具(也称为测试上下文)是一组 运行测试所需的先决条件或状态。开发者应该设置 在测试前达到已知的良好状态,并恢复到原来的状态 测试后的状态。 Wikipedia (xUnit)

        2。包含样本数据的文件

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

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

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

        【讨论】:

          【解决方案4】:

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

          文章的相关部分是:

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

          在某种程度上,您可以通过仔细注意您编写的构造函数来更轻松地编写夹具代码。然而,更大的节省来自共享夹具代码。通常,您将能够为多个不同的测试使用相同的夹具。每种情况都会向夹具发送略有不同的消息或参数,并会检查不同的结果。

          当你有一个共同的固定装置时,你可以这样做:

          为夹具的每个部分添加一个字段 使用 @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");
              }
          }
          

          【讨论】:

            【解决方案5】:

            在 Xamarin.UITest 中解释如下:

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

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

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

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

            【讨论】:

              【解决方案6】:

              我正在写这个答案,作为我自己关于什么是“夹具”的快速说明。

              same-data-multiple-tests

              测试夹具:对多个测试使用相同的数据配置 如果您发现自己编写了两个或多个对相似数据进行操作的测试,则可以使用测试夹具。这允许您为多个不同的测试重用相同的对象配置。

              您可以在googletest阅读更多内容

              fixtures 可用于集成测试或开发过程中(假设数据来自开发数据库的 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阅读更多内容

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-10-28
                • 2012-04-02
                • 2016-06-04
                • 1970-01-01
                • 1970-01-01
                • 2015-05-10
                相关资源
                最近更新 更多