我已经听过这个术语很多次了(在编程环境中),但找不到它的任何解释。有什么好的文章或解释吗?
我认为你指的是测试装置:
测试夹具的目的是确保有一个众所周知的 和固定的环境,在其中运行测试,以便结果 可重复的。一些人称之为测试上下文 装置的例子: 用特定的、已知的数据集加载数据库 擦除硬盘并安装一个已知的干净操作系统安装 复制一组特定的已知文件 准备输入数据和设置/创建假或模拟对象
装置的例子:
(来源:维基百科,见上面的链接)
这里还有一些来自'谷歌Test'框架文档的实际示例。
正是针对这个主题,JUnit有一个解释得很好的文档。在这里是链接!
文章的相关部分是:
测试需要在一组已知对象的背景下运行。这组对象称为测试夹具。在编写测试时,您经常会发现,编写设置fixture的代码所花费的时间比实际测试值所花费的时间还要多。 在某种程度上,通过仔细注意所编写的构造函数,可以使fixture代码的编写更容易。然而,更大的节省来自于共享fixture代码。通常,您将能够对几个不同的测试使用相同的fixture。每个case都会向fixture发送稍微不同的消息或参数,并检查不同的结果。 当你有一个普通的夹具,下面是你要做的: 为夹具的每个部分添加一个字段 用@org.junit注释一个方法。并初始化该方法中的变量 用@org.junit注释一个方法。之后释放在setUp中分配的任何永久资源 例如,要编写几个想要使用12瑞士法郎、14瑞士法郎和28美元的不同组合的测试用例,首先创建一个fixture:
测试需要在一组已知对象的背景下运行。这组对象称为测试夹具。在编写测试时,您经常会发现,编写设置fixture的代码所花费的时间比实际测试值所花费的时间还要多。
在某种程度上,通过仔细注意所编写的构造函数,可以使fixture代码的编写更容易。然而,更大的节省来自于共享fixture代码。通常,您将能够对几个不同的测试使用相同的fixture。每个case都会向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。例如,测试post创建功能 在博客应用程序中,每次运行测试时,表 存储关于帖子的相关数据(例如,帖子表,评论
下面是一个简单的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的函数,因此在运行测试之前,您可以设置您的数据,一旦完成,您可以将它们恢复到初始状态。
setUp
tearDown
Xamarin的。UITest解释如下:
通常情况下,每个Xamarin。UITest被编写为引用的方法 作为一个测试。包含测试的类称为测试 夹具。测试fixture包含单个测试或逻辑测试 对测试进行分组,并负责进行测试的任何设置 在测试结束时运行和需要执行的任何清理。 每个测试都应该遵循安排-行为-断言模式: 安排——测试将设置条件并初始化事情,以便测试可以执行。 行为——测试将与应用程序交互,输入文本,按按钮,等等。 Assert -该测试检查在Act步骤中执行的操作的结果,以确定正确性。例如, 应用程序可以验证特定的错误消息是否正确 李显示。< / >
通常情况下,每个Xamarin。UITest被编写为引用的方法 作为一个测试。包含测试的类称为测试 夹具。测试fixture包含单个测试或逻辑测试 对测试进行分组,并负责进行测试的任何设置 在测试结束时运行和需要执行的任何清理。 每个测试都应该遵循安排-行为-断言模式:
以上摘录的原文链接 . 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 >
我写这个答案是为了让自己快速了解什么是“固定装置”。
测试夹具:对多个测试使用相同的数据配置 如果您发现自己正在编写两个或多个操作类似数据的测试,则可以使用测试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 文档中阅读更多