之前我曾多次听过这个术语(谈论编程时),但找不到任何解释是什么意思。有什么好的文章或解释吗?我没有找到任何值得一提的东西。
答案 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单元测试具有名称为setUp
和tearDown
的函数,在运行测试之前,您可以设置数据,并且在完成后可以将它们恢复到初始状态。
答案 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中阅读更多内容