我听过这个术语很多次(在编程的上下文中),但找不到任何对其含义的解释。有什么好的文章或解释吗?
我听过这个术语很多次(在编程的上下文中),但找不到任何对其含义的解释。有什么好的文章或解释吗?
我认为PHP单元测试对此有很好的解释:
编写测试中最耗费时间的部分之一是编写代码来设置世界处于已知状态,并在测试完成时将其返回到原始状态。这个已知状态称为测试的fixture。
Yii文档也很好地描述了fixture测试:
自动化测试需要执行多次。为了确保测试过程是可重复的,我们希望在一些已知的状态(称为fixture)下运行测试。例如,在博客应用程序中测试帖子创建功能时,每次运行测试时,存储有关帖子的相关数据的表(例如Post表,Comment表)都应恢复到某个固定状态。
这是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
的函数,因此在运行测试之前,您可以设置数据,完成后可以将其恢复到初始状态。
就这个话题而言,JUnit有一个解释详细的文档。这里是链接!
文章相关部分如下:
测试需要在已知一组对象的背景下运行。这组对象称为测试夹具。编写测试时,您通常会发现编写设置夹具代码所花费的时间比实际测试价值更高。
在某种程度上,通过仔细关注您编写的构造函数,可以使编写夹具代码更容易。然而,更大的节省来自共享夹具代码。通常,您将能够为多个不同的测试使用相同的夹具。每种情况将向夹具发送稍微不同的消息或参数,并检查不同的结果。
当您拥有共同的夹具时,应执行以下操作:
为夹具的每个部分添加一个字段 用@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");
}
}
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.");
}
}
}
测试夹具:在多个测试中使用相同的数据配置 如果您发现自己编写了两个或更多个操作类似数据的测试,则可以使用测试夹具。这允许您为几个不同的测试重用相同的对象配置。
您可以在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 文档 中了解更多信息