Fixtures 编程中的固定装置是什么?
我已经多次听说过这个术语(在编程环境中),但找不到任何解释它的含义。有什么好文章或解释吗?我想你指的是: 测试夹具的目的是确保有一个众所周知的 以及固定的运行测试的环境,以确保结果 可重复。有些人称之为测试上下文 固定装置示例:Fixtures 编程中的固定装置是什么?,fixtures,ui-testing,uitest,test-fixture,Fixtures,Ui Testing,Uitest,Test Fixture,我已经多次听说过这个术语(在编程环境中),但找不到任何解释它的含义。有什么好文章或解释吗?我想你指的是: 测试夹具的目的是确保有一个众所周知的 以及固定的运行测试的环境,以确保结果 可重复。有些人称之为测试上下文 固定装置示例: 使用特定的已知数据集加载数据库 擦除硬盘并安装已知的干净操作系统安装 复制特定的已知文件集 准备输入数据和设置/创建假对象或模拟对象 (来源:维基百科,见上面的链接) 这里还有一些。正是针对这个主题,JUnit有一个解释得很好的文档。是链接 本条的相关部分为: 测试
- 使用特定的已知数据集加载数据库
- 擦除硬盘并安装已知的干净操作系统安装
- 复制特定的已知文件集
- 准备输入数据和设置/创建假对象或模拟对象
这里还有一些。正是针对这个主题,JUnit有一个解释得很好的文档。是链接 本条的相关部分为: 测试需要在一组已知对象的背景下运行。这组对象称为测试夹具。在编写测试时,您经常会发现编写代码来设置夹具的时间比实际测试值的时间要多 在某种程度上,您可以通过仔细关注所编写的构造函数来简化fixture代码的编写。然而,更大的节约来自于共享fixture代码。通常,您将能够在几个不同的测试中使用相同的夹具。每种情况都会向夹具发送稍微不同的消息或参数,并检查不同的结果 当您有一个通用夹具时,请执行以下操作: 为夹具的每个零件添加一个字段 用@org.junit.Before注释一个方法,并初始化该方法中的变量 用@org.junit.After注释方法,以释放在安装程序中分配的任何永久资源 例如,要编写几个想要使用12瑞士法郎、14瑞士法郎和28美元的不同组合的测试用例,首先创建一个fixture:
我认为PHP单元测试很好地解释了这一点: 编写测试最耗时的部分之一是编写 将世界设置为已知状态,然后将其返回到其初始状态的代码 测试完成时的原始状态。这种已知状态称为 测试的夹具 此外,Yii文件描述了夹具测试的良好状态: 自动化测试需要执行多次。为了确保测试 这个过程是可重复的,我们希望在一些已知的环境中运行测试 这个州叫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单元测试具有名为
setUp
和tearDown
的函数,在运行测试之前,您可以设置数据,完成后可以将其恢复到初始状态。在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.");
}
}
}
通常,每个Xamarin.UITest都作为引用的方法编写
作为一种测试。包含测试的类称为测试
固定装置测试夹具包含单个测试或逻辑测试
测试分组,并负责进行测试的任何设置
在测试完成时运行和执行任何需要执行的清理。
每个测试应遵循Arrange-Act断言模式:
- 安排–测试将设置条件并初始化内容,以便执行测试
- Act–测试将与应用程序交互、输入文本、按下按钮等
- 断言–测试检查在Act步骤中执行的操作的结果,以确定正确性。例如 应用程序可能会验证特定错误消息是否正确 显示
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。运行测试所针对的已知状态 编写测试最耗时的部分之一是编写 将世界设置为已知状态,然后将其返回到其初始状态的代码 测试完成时的原始状态。这种已知状态称为 测试的夹具。 测试夹具(也称为测试上下文)是 运行测试所需的先决条件或状态。开发人员应该设置 在测试前恢复已知良好状态,并恢复到原始状态 测试后的状态。 2。包含样本数据的文件 Fixtures是一个用于示例数据的花哨词汇。固定装置允许您 在测试之前,使用预定义数据填充测试数据库 跑fixture独立于数据库,并用YAML编写。有 每个模型一个文件。 3。设置所需状态的过程。 软件测试夹具通过以下方式为测试过程设置系统: 为它提供所有必要的代码来初始化它,从而 满足可能存在的任何先决条件。例如: 从客户站点加载具有已知参数的数据库 在运行测试之前。
我写这个答案是为了给自己写一个关于什么是“固定装置”的速记 同一数据多次测试 测试夹具:对多个测试使用相同的数据配置 如果您发现自己编写了两个或多个对类似数据进行操作的测试,则可以使用测试夹具。这允许您为几个不同的测试重用相同的对象配置 你可以在 在集成测试期间,夹具可用于
[
{
"model": "myapp.person",
"pk": 1,
"fields": {
"first_name": "John",
"last_name": "Lennon"
}
},
{
"model": "myapp.person",
"pk": 2,
"fields": {
"first_name": "Paul",
"last_name": "McCartney"
}
}
]