ฉันเคยได้ยินคำนี้มาหลายครั้ง (ในบริบทของการเขียนโปรแกรม) แต่ไม่สามารถหาคำอธิบายเกี่ยวกับสิ่งที่มันหมายถึง มีบทความหรือคำอธิบายที่ดีบ้างไหม?
ฉันเคยได้ยินคำนี้มาหลายครั้ง (ในบริบทของการเขียนโปรแกรม) แต่ไม่สามารถหาคำอธิบายเกี่ยวกับสิ่งที่มันหมายถึง มีบทความหรือคำอธิบายที่ดีบ้างไหม?
คำตอบ:
ฉันคิดว่าคุณหมายถึงการทดสอบการติดตั้ง :
วัตถุประสงค์ของการติดตั้งการทดสอบคือเพื่อให้แน่ใจว่ามีสภาพแวดล้อมที่รู้จักกันดีและคงที่ซึ่งการทดสอบจะทำงานเพื่อให้ผลลัพธ์ที่ทำซ้ำ บางคนเรียกสิ่งนี้ว่าบริบทการทดสอบ
ตัวอย่างของการแข่งขัน:
- กำลังโหลดฐานข้อมูลด้วยชุดข้อมูลเฉพาะที่เป็นที่รู้จัก
- การลบฮาร์ดดิสก์และติดตั้งการติดตั้งระบบปฏิบัติการที่รู้จัก
- การคัดลอกชุดไฟล์ที่รู้จักเป็นพิเศษ
- การเตรียมข้อมูลอินพุตและการตั้งค่า / การสร้างวัตถุปลอมหรือจำลอง
(ที่มา: วิกิพีเดียดูลิงค์ด้านบน)
ที่นี่ยังมีบางตัวอย่างการปฏิบัติจากเอกสารของกรอบ 'Google ทดสอบฯ
ฉันคิดว่าการทดสอบหน่วย 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
ก่อนที่จะทำการทดสอบคุณตั้งค่าข้อมูลของคุณและเมื่อเสร็จแล้วคุณสามารถคืนค่าให้อยู่ในสถานะเริ่มต้น
คำที่ติดตั้งแตกต่างกันไปตามบริบทภาษาโปรแกรมหรือกรอบ
1. สถานะที่ทราบที่ใช้ทดสอบอยู่
หนึ่งในส่วนที่ใช้เวลามากที่สุดในการทำข้อสอบคือการเขียนรหัสเพื่อกำหนดโลกให้อยู่ในสถานะที่รู้จักแล้วกลับสู่สถานะดั้งเดิมเมื่อการทดสอบเสร็จสมบูรณ์ สถานะที่รู้จักนี้เรียกว่าฟิกซ์เจอร์ทดสอบ เอกสาร PHP-Unit
ฟิกซ์เจอร์ทดสอบ (หรือเรียกอีกอย่างว่าบริบทการทดสอบ) คือชุดของเงื่อนไขเบื้องต้นหรือสถานะที่จำเป็นในการรันการทดสอบ ผู้พัฒนาควรตั้งค่าสถานะที่รู้จักดีก่อนการทดสอบและกลับสู่สถานะเดิมหลังจากการทดสอบ Wikipedia (xUnit)
2. ไฟล์ที่มีข้อมูลตัวอย่าง
การแข่งขันเป็นคำแฟนซีสำหรับข้อมูลตัวอย่าง การติดตั้งช่วยให้คุณสามารถเติมฐานข้อมูลการทดสอบของคุณด้วยข้อมูลที่กำหนดไว้ล่วงหน้าก่อนที่การทดสอบของคุณจะทำงาน การแข่งขันเป็นฐานข้อมูลที่เป็นอิสระและเขียนใน YAML มีหนึ่งไฟล์ต่อหนึ่งรุ่น RubyOnRails.org
3. กระบวนการที่ตั้งค่าสถานะที่ต้องการ
ฟิกซ์เจอร์ทดสอบซอฟต์แวร์จะตั้งค่าระบบสำหรับกระบวนการทดสอบโดยจัดเตรียมรหัสที่จำเป็นทั้งหมดเพื่อเริ่มใช้งาน ตัวอย่างสามารถโหลดฐานข้อมูลด้วยพารามิเตอร์ที่รู้จักจากไซต์ลูกค้าก่อนทำการทดสอบ วิกิพีเดีย
ตรงกับหัวข้อนั้น JUnit มีเอกสารอธิบายอย่างดี นี่คือลิงค์!
ส่วนที่เกี่ยวข้องของบทความคือ:
การทดสอบจะต้องทำงานกับพื้นหลังของชุดของวัตถุที่รู้จัก ชุดของวัตถุนี้เรียกว่าฟิกซ์เจอร์ทดสอบ เมื่อคุณกำลังเขียนการทดสอบคุณมักจะพบว่าคุณใช้เวลาเขียนรหัสเพื่อตั้งค่าการติดตั้งมากกว่าที่คุณทำในการทดสอบค่าจริง
ในระดับหนึ่งคุณสามารถทำการเขียนรหัสการติดตั้งได้ง่ายขึ้นโดยให้ความสนใจกับตัวสร้างที่คุณเขียน อย่างไรก็ตามการประหยัดที่ใหญ่กว่านั้นมาจากการแชร์รหัสประจำที่ บ่อยครั้งคุณจะสามารถใช้ฟิกซ์เจอร์เดียวกันสำหรับการทดสอบหลายแบบ แต่ละกรณีจะส่งข้อความหรือพารามิเตอร์ที่แตกต่างกันเล็กน้อยไปยังฟิกซ์เจอร์และจะตรวจสอบผลลัพธ์ที่แตกต่างกัน
เมื่อคุณมีการติดตั้งทั่วไปนี่คือสิ่งที่คุณทำ:
เพิ่มฟิลด์สำหรับแต่ละส่วนของฟิกซ์เจอร์ให้ทำหมายเหตุประกอบเมธอดด้วย @ org.junit.Before และเริ่มต้นตัวแปรในเมธอดนั้นหมายเหตุวิธีการกับ @ org.junit.A หลังจากที่ปล่อยรีซอร์สถาวรใด ๆ ที่คุณจัดสรรไว้ใน 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");
}
}
ใน Xamarin.UITest จะมีการอธิบายดังต่อไปนี้:
โดยทั่วไปแล้วแต่ละ Xamarin.UITest จะถูกเขียนเป็นวิธีการที่เรียกว่าการทดสอบ คลาสที่มีการทดสอบเรียกว่าฟิกซ์เจอร์ทดสอบ ฟิกซ์เจอร์ทดสอบประกอบด้วยการทดสอบเดี่ยวหรือการจัดกลุ่มแบบลอจิคัลของการทดสอบและรับผิดชอบการตั้งค่าใด ๆ เพื่อให้การทดสอบการทำงานและการล้างข้อมูลใด ๆ ที่ต้องดำเนินการเมื่อการทดสอบเสร็จสิ้น การทดสอบแต่ละครั้งควรเป็นไปตามรูปแบบ Arrange-Act-Assert:
- จัดเรียง - การทดสอบจะตั้งค่าเงื่อนไขและเริ่มต้นสิ่งต่าง ๆ เพื่อให้การทดสอบสามารถดำเนินการได้
- Act - การทดสอบจะโต้ตอบกับแอปพลิเคชันป้อนข้อความกดปุ่มและอื่น ๆ
- ยืนยัน - การทดสอบตรวจสอบผลลัพธ์ของการกระทำที่ทำในขั้นตอนการปฏิบัติเพื่อกำหนดความถูกต้อง ตัวอย่างเช่นแอปพลิเคชันอาจตรวจสอบว่ามีข้อความแสดงข้อผิดพลาดปรากฏขึ้น
ลิงก์สำหรับบทความต้นฉบับของข้อความที่ตัดตอนมาข้างต้น
และภายในรหัส 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.");
}
}
}
หวังว่าสิ่งนี้อาจเป็นประโยชน์กับคนที่ค้นหาความเข้าใจที่ดีขึ้นเกี่ยวกับการแข่งขันในการเขียนโปรแกรม