编程中的固定装置是什么?

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

114304 次浏览

我认为你指的是测试装置:

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

装置的例子:

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

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

这里还有一些来自'谷歌Test'框架文档的实际示例

正是针对这个主题,JUnit有一个解释得很好的文档。在这里是链接!

文章的相关部分是:

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

在某种程度上,通过仔细注意所编写的构造函数,可以使fixture代码的编写更容易。然而,更大的节省来自于共享fixture代码。通常,您将能够对几个不同的测试使用相同的fixture。每个case都会向fixture发送稍微不同的消息或参数,并检查不同的结果。

当你有一个普通的夹具,下面是你要做的:

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

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

我认为php单元测试很好地解释了这一点:

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

另外Yii文件中还描述了夹具测试的良好形状:

自动化测试需要执行多次。确保测试 过程是可重复的,我们要在一些已知的情况下运行测试 状态称为fixture。例如,测试post创建功能 在博客应用程序中,每次运行测试时,表 存储关于帖子的相关数据(例如,帖子表,评论

. Table)应该恢复到某个固定状态

下面是一个简单的fixture测试示例:

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

Xamarin的。UITest解释如下:

通常情况下,每个Xamarin。UITest被编写为引用的方法 作为一个测试。包含测试的类称为测试 夹具。测试fixture包含单个测试或逻辑测试 对测试进行分组,并负责进行测试的任何设置 在测试结束时运行和需要执行的任何清理。 每个测试都应该遵循安排-行为-断言模式:

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

以上摘录的原文链接 . b

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

希望这可能对那些正在寻找更好地理解编程中的fixture的人有所帮助。

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

1. 运行测试所依据的已知状态

编写测试中最耗时的部分之一是编写 代码将世界设置为已知状态,然后将其返回到其 测试完成时的原始状态。这个已知的状态被称为 测试的夹具。 PHP-Unit文档 < / p > 测试fixture(也称为测试上下文)是的集合 运行测试所需的先决条件或状态。开发人员应该设置 在测试前已知状态良好,并恢复原状 测试结束后声明 维基百科(xUnit) < / p >

2. 包含示例数据的文件

fixture是示例数据的花哨词。固定装置可以让你 在测试之前,用预定义的数据填充测试数据库 运行。fixture是数据库独立的,并且是用YAML编写的。有 每个模型一个文件。 RubyOnRails.org < / p >

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

软件测试夹具为测试过程设置了系统 为它提供初始化所需的所有代码 满足任何先决条件。一个例子是 从客户站点加载具有已知参数的数据库 在运行测试之前。 维基百科 < / p >

我写这个答案是为了让自己快速了解什么是“固定装置”。

same-data-multiple-tests

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

你可以在googletest上阅读更多

fixture可以用于集成测试或开发期间(假设UI开发中数据来自开发数据库)

用于数据库或测试的假用户

myproject /夹具/ 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 文档中阅读更多