TDD with Spring Boot - up1/training-courses GitHub Wiki

Course Description

แนวคิดของ Test-Driven Development (TDD) นั้นได้รับความนิยมในการพัฒนาระบบงานเพิ่มขึ้นเป็นอย่างมาก
ช่วยเพิ่มความเชื่อมั่นในการพัฒนา ทั้งทีมพัฒนาและส่งผลไปยังผู้ใช้งานระบบด้วยเช่นกัน (Internal and External confidence)
รวมทั้งช่วยเพิ่มความเร็วและคุณภาพของการพัฒนาระบบงานอีกด้วย (Speed and Quality)
แต่ก่อนอื่นจำเป็นต้องมีความรู้และเข้าใจ ตลอดลงมือฝึกฝนที่ถูกต้อง ก่อนนำไปใช้งาน (ช้าไม่เป็นก็เร็วไม่ได้)

โดยใน course นี้จะเน้นไปที่การพัฒนาระบบงานด้วยภาษา Java
รวมทั้งลงมือพัฒนาและทดสอบ RESTful API ด้วย framework ที่ได้รับความนิยมนั่นก็คือ Spring Framework และ Spring Boot แบบ step-by-step

Learn

  • เรียนรู้แนวคิดและความสำคัญของ Test-Driven Development (TDD)
  • เรียนรู้และใช้งาน JUnit สำหรับการเขียนชุดการทดสอบในภาษา Java
  • เข้าใจการทดสอบในรูปแบบต่าง ๆ ตั้งแต่ Unit, Integration, Component, Contract และ End-to-End testing
  • เข้าใจการทดสอบระบบงานที่พัฒนาด้วย Spring Framework และ Spring Boot

Target Groups

  • Java programmer/developer
  • Automation tester/QA (required programming skill)

Software Requirements

  • JDK 1.8+
  • IntelliJ IDE Community Edition (CE)

Course Outline

  • ความรู้พื้นฐานเกี่ยวกับ Test-Driven Development (TDD)
    • TDD Life Cycle
    • TDD vs DLP (Debug Later Programming)
    • ความสำคัญสำหรับ TDD
  • เริ่มต้นเขียนชุดการทดสอบด้วย JUnit
    • Structure of good unit test (GUT)
      • Arrange
      • Act
      • Assert
    • JUnit Life Cycle
    • Assertion
    • Data-Driven Test with JUnit
    • JUnit features
      • Timeout
      • Conditional
      • Category
      • Suite
    • Running testing
  • การเขียนชุดการทดสอบที่ดี
    • Fast
    • Independent
    • Repeatable
    • Self-validate
    • Timely
  • Code/Test coverage
    • Code Coverage คืออะไร มีเป้าหมายเพื่ออะไร
    • ใช้งาน Code Coverage ในระบบงาน
  • การออกแบบที่ดีด้วย SOLID design principle
    • Single Responsibility Principle
    • Open/Closed Principle
    • Interface Seggregation Principle
    • Dependency Inversion Principle
  • Test Double
    • Dummy
    • Stub
    • Spy
    • Mock
    • Fake
  • ความรู้พื้นฐานเกี่ยวกับ Spring Framework
    • Spring Framework
      • Inversion of Control (IoC)
      • Dependency Injection (DI)
      • Contexts
      • Beans and Scopes
    • Spring Projects and Modules
  • ความรู้พื้นฐานเกี่ยวกับ Spring Boot 2.x
    • การทำงานของ Spring Boot
    • รูปแบบการ deploy ของ Spring Boot
    • การพัฒนา RESTful API ด้วย Spring Boot
    • โครงสร้างที่ดีของระบบงาน (Better project structure of project)
    • การจัดการ dependency ต่าง ๆ ของ Spring Boot
    • Layers ของระบบงาน
      • Controller layer
      • Service layer
      • Repository layer
      • Gateway layer
      • Entity class vs Bean/Response class
  • การพัฒนาและทดสอบ Controller Layer
    • การพัฒนา controller ด้วย REST Controller
    • การออกแบบและสร้าง RESTful API
    • การจัดการข้อมูลทั้ง request และ response
    • การจัดการ Error handling ด้วย Spring AOP
    • การทดสอบ controller ในรูปแบบต่าง ๆ
      • Spring Boot Testing
      • Spring MVC Test
      • Unit testing with JUnit and Mockito
  • การพัฒนาและทดสอบ Service Layer
    • การพัฒนาส่วนการทำงานใน Service Layer (Business process)
    • การทดสอบ service ในรูปแบบต่าง ๆ
      • Spring Boot Testing
      • Spring MVC Test
      • Unit testing with JUnit and Mockito
    • การทำงานร่วมกับ Repository layer
    • การจัดการ transaction กับ Database/Repository
  • การพัฒนาและทดสอบ Repository Layer
    • การพัฒนาส่วนการจัดการข้อมูลด้วย Spring Data JPA และ JDBC
    • Transaction Management
    • การทดสอบ service ในรูปแบบต่าง ๆ
      • Spring Boot Testing
      • JDBC Testing
      • JPA Testing
  • การพัฒนาและทดสอบ Gateway Layer
    • การพัฒนาส่วนการดึงข้อมูลผ่าน RESTful API ด้วย REST Template และ Feign
    • การทดสอบ service ในรูปแบบต่าง ๆ
      • Contract/Consumer Testing