การจำลองและชุดข้อมูลทดสอบ
การเตรียมการทดสอบ
การจำลองและชุดข้อมูลทดสอบ เป็นบทเรียน Scala for Backend Engineering & Functional Programming ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Scala for Backend Engineering & Functional Programming และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน
การเตรียมและเก็บกวาดหลังการทดสอบ
การทดสอบจำนวนมากต้องใช้อุปกรณ์ประกอบการทดสอบร่วมกัน ซึ่งได้แก่ข้อมูลหรือทรัพยากรที่เตรียมไว้ก่อนการทดสอบและเก็บกวาดหลังจากนั้น ScalaTest มีหลายวิธีจัดการเรื่องนี้โดยไม่ต้องทำซ้ำโค้ดการเตรียม
อุปกรณ์ประกอบแบบง่าย: ใช้เมธอด
อุปกรณ์ประกอบที่ง่ายที่สุดคือเมธอดช่วยซึ่งสร้างสถานะใหม่ แต่ละการทดสอบเรียกใช้เมธอดนี้ จึงรับประกันการแยกออกจากกัน
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class StackSpec extends AnyFlatSpec with Matchers {
def emptyStack(): scala.collection.mutable.Stack[Int] =
scala.collection.mutable.Stack.empty[Int]
"a stack" should "start empty" in {
emptyStack().size shouldBe 0
}
}BeforeAndAfter
ผนวก BeforeAndAfter เพื่อเรียกใช้โค้ดก่อนและหลังการทดสอบแต่ละรายการด้วยบล็อก before { } และ after { }
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import org.scalatest.BeforeAndAfter
class DbSpec extends AnyFlatSpec with Matchers with BeforeAndAfter {
var counter = 0
before { counter = 10 }
after { counter = 0 }
"counter" should "be initialized" in {
counter shouldBe 10
}
}BeforeAndAfterAll
สำหรับทรัพยากรที่ใช้เวลาสร้างมากและใช้ร่วมกันในการทดสอบทั้งหมดของชุดการทดสอบ เช่น การเชื่อมต่อฐานข้อมูลหรือเซิร์ฟเวอร์ฝังตัว ให้ใช้ BeforeAndAfterAll ร่วมกับ beforeAll และ afterAll
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.BeforeAndAfterAll
class ServerSpec extends AnyFlatSpec with BeforeAndAfterAll {
override def beforeAll(): Unit = println("start server")
override def afterAll(): Unit = println("stop server")
"server" should "respond" in {
assert(true)
}
}รูปแบบอุปกรณ์ประกอบแบบยืม
รูปแบบการยืมจะส่งทรัพยากรที่สร้างใหม่ให้เนื้อหาการทดสอบ และรับประกันการเก็บกวาดใน finally แม้ว่าการทดสอบจะไม่ผ่าน
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class FileSpec extends AnyFlatSpec with Matchers {
def withBuffer(test: StringBuilder => Any): Unit = {
val buf = new StringBuilder("init")
try test(buf)
finally buf.clear()
}
"a buffer" should "start with init" in withBuffer { buf =>
buf.toString shouldBe "init"
}
}ทำไมต้องจำลอง
สิ่งจำลองคือสิ่งที่ใช้แทนการพึ่งพาจริง เช่น ฐานข้อมูลหรือไคลเอ็นต์ HTTP เพื่อให้การทดสอบหน่วยทำงานได้รวดเร็วและให้ผลแน่นอน คุณควบคุมค่าที่สิ่งจำลองส่งคืนและตรวจสอบวิธีที่ถูกเรียกใช้ได้
การเพิ่ม Mockito
ScalaTest ผสานการทำงานกับ Mockito ผ่าน scalatestplus ให้เพิ่มการพึ่งพาและผนวก MockitoSugar
libraryDependencies += "org.scalatestplus" %% "mockito-5-10" % "3.2.18.0" % Testการกำหนดพฤติกรรมของเมธอดจำลอง
สร้างสิ่งจำลองและกำหนดพฤติกรรมด้วย when(...).thenReturn(...) จากนั้นการทดสอบจะเรียกใช้โค้ดที่พึ่งพาสิ่งจำลองนั้น
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import org.scalatestplus.mockito.MockitoSugar
import org.mockito.Mockito.when
trait Repo { def find(id: Int): String }
class RepoSpec extends AnyFlatSpec with Matchers with MockitoSugar {
"a repo" should "return stubbed value" in {
val repo = mock[Repo]
when(repo.find(1)).thenReturn("Alice")
repo.find(1) shouldBe "Alice"
}
}การตรวจสอบการโต้ตอบ
นอกจากค่าที่ส่งคืนแล้ว คุณยังตรวจสอบได้ว่าเมธอดถูกเรียกตามจำนวนครั้งที่คาดไว้ด้วย verify
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatestplus.mockito.MockitoSugar
import org.mockito.Mockito.{verify, times}
trait Logger { def log(msg: String): Unit }
class LogSpec extends AnyFlatSpec with MockitoSugar {
"a service" should "log once" in {
val logger = mock[Logger]
logger.log("hi")
verify(logger, times(1)).log("hi")
}
}สิ่งจำลอง เทียบกับตัวแทน และของปลอม
คำศัพท์:
- ตัวแทน: ส่งคืนคำตอบที่เตรียมไว้
- สิ่งจำลอง: ช่วยให้ตรวจสอบการโต้ตอบได้ด้วย
- ของปลอม: การนำไปใช้งานที่ทำงานได้และมีน้ำหนักเบา เช่น ที่เก็บข้อมูลในหน่วยความจำ
เมื่อทำได้ง่าย ให้เลือกของปลอมหรืออ็อบเจกต์จริง และใช้สิ่งจำลองเฉพาะการพึ่งพาภายนอกที่จำเป็นจริง
การแยกการทดสอบออกจากกัน
อุปกรณ์ประกอบและสิ่งจำลองมีเป้าหมายเดียวกัน คือให้การทดสอบแต่ละรายการทำงานในสถานะที่ทราบแน่ชัดและเป็นอิสระต่อกัน รีเซ็ตสถานะที่เปลี่ยนแปลงร่วมกันก่อนการทดสอบแต่ละรายการ และหลีกเลี่ยงการใช้อุปกรณ์ประกอบที่เปลี่ยนแปลงร่วมกันระหว่างการทดสอบ เพื่อป้องกันความล้มเหลวที่เกิดขึ้นไม่แน่นอนและขึ้นกับลำดับการทำงาน
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความรู้เกี่ยวกับอุปกรณ์ประกอบและการจำลอง
สรุปทบทวน
คุณได้เรียนรู้เรื่องอุปกรณ์ประกอบและการจำลอง:
- อุปกรณ์ประกอบ: เมธอดช่วย
BeforeAndAfter,BeforeAndAfterAllและรูปแบบการยืม - สิ่งจำลอง (ผ่าน MockitoSugar): กำหนดตัวแทนด้วย
when().thenReturn()และตรวจสอบการเรียกด้วยverify - เลือกของปลอมสำหรับกรณีง่าย ๆ และใช้สิ่งจำลองกับการพึ่งพาภายนอก
- แยกการทดสอบทุกชุดออกจากกันและไม่ให้ขึ้นกับลำดับ
เรียนรู้ Scala ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 39
- บทเรียน
- 143
คำถามที่พบบ่อย
บทเรียน “การจำลองและชุดข้อมูลทดสอบ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจำลองและชุดข้อมูลทดสอบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Scala for Backend Engineering & Functional Programming ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจำลองและชุดข้อมูลทดสอบ”
การเตรียมการทดสอบ คุณปฏิบัติ Scala for Backend Engineering & Functional Programming ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Scala for Backend Engineering & Functional Programming หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Scala for Backend Engineering & Functional Programming บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การจำลองและชุดข้อมูลทดสอบ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Scala for Backend Engineering & Functional Programming นี้ได้ไหม
ได้ บทเรียน Scala for Backend Engineering & Functional Programming ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- รูปแบบของ ScalaTest
- ตัวจับคู่
- การทดสอบตามคุณสมบัติ
- การจำลองและชุดข้อมูลทดสอบ