285
Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb @the_zenspider Minitest 6: Test Feistier!

Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Minitest 6: Test Feistier!

Page 2: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Setting ExpectationsOverview / Idea TalkLittle CodeTesters at All Levels

265 slides / 40 min = ~7 spm�2

Page 3: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

🎺🎷

🎊🎉�3

Page 4: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

1000+ Gems!

�4

Page 5: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Narrative?

�5

Page 6: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�6

Page 7: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

%?

�6

Page 8: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

%?🥙?

�6

Page 9: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

%?🥙?🍔?

�6

Page 10: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

what you’ll tell themActual Content

what you told them

Presentation Sammich

�7

Page 11: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

😞

�8

Page 12: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

➡🍔💬 = 👎

�9

Page 13: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�10

Page 14: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

🗣🍔💬 = 🤢

�11

Page 15: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�12

https://www.flickr.com/photos/hsincheng_lin/12180213616

Page 16: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

🥅

�13

Page 17: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Sorry! 😨

�14

Page 18: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

💍

�15

Page 19: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

🤷2

�16

Page 20: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

🖐Audience🖐

�17

Page 21: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Beginner?

�18

Page 22: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Minitest User?

�19

Page 23: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

RSpec User?

�20

Page 24: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

RSpec Fanatic?

�21

Page 25: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

All are Welcome!

�22

Page 26: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

(I Heckle Back)

�23

Page 27: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

My Baby: Minitest

�24

Page 28: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

�25

Page 29: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Testing=Passion

�26

Page 30: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

1995!

�27

Page 31: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Pre-XP

�28

Page 32: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

TDDesign

�29

Page 33: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

TDDevelopment

�30

Page 34: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

TDD+YAGNI

�31

Page 35: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Better Software

�32

Page 36: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Every Time�33

Page 37: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Every Time�33

(Almost)

Page 38: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Minitest

�34

Page 39: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

What I am talking about

�35

Page 40: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Introduction

�36

Page 41: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Quick History

�37

Page 42: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Philosophy &

Purpose�38

Page 43: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Major Changes

�39

Page 44: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Architectural

�40

Page 45: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

& API Changes

�41

Page 46: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

What I am not talking about

�42

Page 47: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Testing=Good

�43

Page 48: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�44

Page 49: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�44

Page 50: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Use Minitest?

�45

Page 51: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

✅Fantastic!

�46

Page 52: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

❌That’s OK!

�47

Page 53: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Informative

�48

Page 54: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

🤜rspec🤛

�49

Page 55: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�50

Page 56: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�51

�i

meh

Page 57: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

∀x: minitest(x) < rspec(x)

�52

Page 58: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

∀x: minitest(time) < rspec(time)

�53

Page 59: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

∀x: minitest(mem) < rspec(mem)

�54

Page 60: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

∀x: minitest(users) < rspec(users)

�55

Page 61: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

∀x: minitest(dl) < rspec(dl)

�56

Page 62: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

At the end of the day

�57

Page 63: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

I do NOT care, as long as you test.

�58

Page 64: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

That Said...

�59

Page 65: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Minitest is faster and more direct

�60

Page 66: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

�61

Page 67: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

What & Why

�62

Page 68: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

∂�63

Page 69: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Guided Read of Minitest

�64

http://confreaks.tv/videos/rubyconf2015-a-guided-read-of-minitest

Page 70: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Writing a Test Framework

from Scratch�65

http://www.zenspider.com/presentations/2016-roa.html

Page 71: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

what you’ll tell them

Presentation Sammich

�66

Page 72: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Quick Introduction

�67

Page 73: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Test Framework

�68

Page 74: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Unit & Functional

�69

Page 75: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

XUnit-StyleClassesMethods

Assertions�70

Page 76: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Spec-Styledescribe blocks

it blocksexpectations

�71

Page 77: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

HardwareAgnostic

Performance Testing

�72

Page 78: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Stubs & Mocks

�73

Page 79: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

TDD & BDD

�74

Page 80: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Clean Architecture

�75

Page 81: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Very Very Fast

�76

Page 82: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Flexible Reporting

�77

Page 83: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Extensible: 200+ Gems

�78

Page 84: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

The Briefest History of Minitest

�79

Page 85: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

😴

�80

Page 86: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

2004 test/unit

�81

Page 87: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

🤷

�82

Page 88: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

22 files, ~2400 LOC, ~2500 flog

�83

Page 89: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

5 Runners

�84

Page 90: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

2 “Collectors”

�85

Page 91: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

and ALL the pattern buzzwords

�86

Page 92: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

template engine

�87

Page 93: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

assert_block

�88

Page 94: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Why?

�89

Page 95: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Failure Driven

Development�90

Page 96: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

~25 Projects

�91

Page 97: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Best of All

�92

Page 98: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Only 75 lines!

�93

Page 99: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

at_exit { Test::Unit.autotest }

module Test class Assertion < Exception; end class Unit VERSION = "1.0.0" def self.autotest ObjectSpace.each_object(Class) do |klass| next unless klass < Test::Unit::TestCase inst = klass.new klass.public_instance_methods(true).each do |meth| next unless meth.index("test") == 0 begin inst.setup inst.send meth.intern inst.teardown rescue Exception => e print "\n", (Test::Assertion === e ? "Failure: " : "Error: ") puts "#{klass}.#{meth}: #{e}" puts e.backtrace end end end end end end

module Test class Unit class TestCase def setup; end def teardown; end def assert(test, msg="failed assertion (no message given)") raise Test::Assertion, msg unless test end def assert_equal(exp, act, msg=nil) assert exp == act, msg || "Expected #{act.inspect} to be equal to #{exp.inspect}" end def assert_in_delta(exp, act, delta, msg=nil) assert((exp.to_f - act.to_f).abs <= delta.to_f, msg || "Expected #{exp} to be within #{delta} of #{act}") end def assert_instance_of(cls, obj, msg=nil) assert cls === obj, msg || "Expected #{obj} to be a #{cls}" end def assert_kind_of(cls, obj, msg=nil) assert obj.kind_of?(cls), msg || "Expected #{obj.inspect} to be a kind of #{cls}" end def assert_match(exp, act, msg=nil) assert act =~ exp, msg || "Expected #{act.inspect} to match #{exp.inspect}" end def assert_nil(obj, msg=nil) assert obj.nil?, msg || "Expected #{obj.inspect} to be nil" end def assert_not_equal(exp, act, msg=nil) assert exp != act, msg || "Expected #{act.inspect} to not be equal to #{exp.inspect}" end def assert_not_nil(obj, msg=nil) assert ! obj.nil?, msg || "Expected #{obj.inspect} to not be nil" end def assert_not_same(exp, act, msg=nil) assert ! exp.equal?(act), msg || "Expected #{act.inspect} to not be the same as #{exp.inspect}" end def assert_raises(exp, msg=nil) yield assert false, "Expected #{exp} to be raised" rescue Exception => e assert exp === e, msg || "Expected #{exp} to be raised, but got #{e.class}" return e end alias :assert_raise :assert_raises def assert_same(exp, act, msg=nil) assert exp.equal?(act), msg || "Expected #{act.inspect} to be the same as #{exp.inspect}" end def assert_operator(o1, op, o2, msg="") assert o1.__send__(op, o2), msg || "Expected #{o1}.#{op}(#{o2}) to be true" end def assert_nothing_raised; yield; end end end end

Page 100: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

History in a 🥜

�95

2006-10 1.0.0 Initial Release.2008-06 1.2.0 Full Assertions, Specs, and Mocks.2010-11 2.0.0 Benchmarks.2012-05 3.0.0 Stubs & other enhancements.2012-09 4.0.0 Nothing external. Internal name changes.2013-05 5.0.0 Huge overhaul. What I really wanted.2018-01 5.11.3 Current functionality. Expanded Reporters.

Page 101: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

History in a 🥜

�95

2006-10 1.0.0 Initial Release.2008-06 1.2.0 Full Assertions, Specs, and Mocks.2010-11 2.0.0 Benchmarks.2012-05 3.0.0 Stubs & other enhancements.2012-09 4.0.0 Nothing external. Internal name changes.2013-05 5.0.0 Huge overhaul. What I really wanted.2018-01 5.11.3 Current functionality. Expanded Reporters.

Page 102: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

History in a 🥜

�96

2006-10 1.0.0 Initial Release.2008-06 1.2.0 Full Assertions, Specs, and Mocks.2010-11 2.0.0 Benchmarks.2012-05 3.0.0 Stubs & other enhancements.2012-09 4.0.0 Nothing external. Internal name changes.2013-05 5.0.0 Huge overhaul. What I really wanted.2018-01 5.11.3 Current functionality. Expanded Reporters.

Page 103: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�97

Page 104: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�97

Page 105: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Complexity Over Time

�98

0

750

1500

2250

300020

06

2007

2008

2009

2010

2011

2012

2013

2014

2015

2016

2017

2018

2019

1 1.2 2 34 5 5.116

VersionLOCFlog

Page 106: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

0

4500

9000

13500

18000

2.0 3.0 3.5

FlogLOC rspec 2-3.5

�99

Page 107: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

0

4500

9000

13500

18000

2.0 3.0 3.5

FlogLOC

minitest

rspec 2-3.5

�99

Page 108: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Minitest Firsts

�100

Page 109: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Shuffle tests by default

�101

Page 110: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Test & Spec, TDD & BDD

�102

Page 111: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Benchmark Tests

�103

Page 112: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Purpose & Philosophy of

Minitest�104

Page 113: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

I ❤ XP

�105

http://www.projectcartoon.com

Page 114: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Test First

�106

http://wiki.c2.com/?CodeUnitTestFirst

Page 115: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

DTSTTCPW “dut-st-t-cupwuh”???

�107

http://wiki.c2.com/?DoTheSimplestThingThatCouldPossiblyWork

Page 116: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

YAGNI

�108

http://wiki.c2.com/?YouArentGonnaNeedIt

Page 117: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Incredibly Simple

�109

Page 118: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Learning Ruby is hard enough!

�110

Page 119: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

🏃Takes a Lot=

�111

Page 120: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

minitest? rspec? Beginner?

Magic!�112

Page 121: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Ruby is Magic

�113

Page 122: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

def is my stub frameworkthingy = Something.new

def thingy.expensive_value 42 end

# …write fast tests…

�114

Page 123: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Less Magic

�115

Page 124: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Framework < Learning

�116

Page 125: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Expand Toolbox

�117

Page 126: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Lower the Bar

�118

Page 127: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Lower the BarClasses & Objects

�118

Page 128: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Lower the BarClasses & ObjectsMethods & Method calls

�118

Page 129: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Lower the BarClasses & ObjectsMethods & Method callsReading API Doco

�118

Page 130: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Nothing Extra

�119

Page 131: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Usable Tools

�120

Page 132: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Minimal Testrequire "minitest/autorun" class TestCalculator < Minitest::Test def test_basics assert_equal 4, calculate("2+2") end end

�121

Page 133: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Minimal Specrequire "minitest/autorun" describe Calculator do it "should handle the basics" do _(calculate "2+2").must_equal 4 end end

�122

Page 134: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

1:1

�123

Page 135: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

specs are tests

�124

Page 136: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Just Ruby™

�125

Page 137: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Just Use Ruby™

�126

Page 138: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Incredibly Fast

�127

Page 139: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Fastest Test

Framework�128

Page 140: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

It achieves that by doing nothing extraMinitest.autorun Minitest.run(args) Minitest.__run(reporter, options) Runnable.runnables.each runnable.run(reporter, options) self.runnable_methods.each do |method| self.run_one_method(method, reporter) Minitest.run_one_method(klass, method) klass.new(runnable_method).run

�129

Page 141: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�130

Page 142: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

(Almost) Nothing Extra

�131

Page 143: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Store Nothing Extra

�132

Page 144: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

GC

�133

Page 145: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Don’t Create Extra Objects

�134

Page 146: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Release ASAP

�135

Page 147: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Memory = #tests

�136

Page 148: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Memory = #failures

�137

Page 149: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

rspec is nx

�138

Page 150: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Pain = Slow

�139

Page 151: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

RSpec ~30% slower on a

fast suite�140

Page 152: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Improve Testing

�141

Page 153: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�142

Randomize Test Order

Require Assertion Call?

Incre

dibly

Fast

Tests

Parallelization by default

01

2

3

45

6 78

9

1011

Only meaningful assertions

Choice: tests or specs

Benchmark Tests

Test Driven Design Refac

tor A

sser

tions

Refactor Test Classes

???

Page 154: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�143

Randomize Test Order

Require Assertion Call?

Incre

dibly

Fast

Tests

Parallelization by default

01

2

3

45

6 78

9

1011

Only meaningful assertions

Choice: tests or specs

Benchmark Tests

Test Driven Design Refac

tor A

sser

tions

Refactor Test Classes

???

Page 155: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�144

Randomize Test Order

Require Assertion Call?

Incre

dibly

Fast

Tests

Parallelization by default

01

2

3

45

6 78

9

1011

Only meaningful assertions

Choice: tests or specs

Benchmark Tests

Test Driven Design Refac

tor A

sser

tions

Refactor Test Classes

???

Page 156: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�145

Randomize Test Order

Require Assertion Call?

Incre

dibly

Fast

Tests

Parallelization by default

01

2

3

45

6 78

9

1011

Only meaningful assertions

Choice: tests or specs

Benchmark Tests

Test Driven Design Refac

tor A

sser

tions

Refactor Test Classes

???

Page 157: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�146

Randomize Test Order

Require Assertion Call?

Incre

dibly

Fast

Tests

Parallelization by default

01

2

3

45

6 78

9

1011

Only meaningful assertions

Choice: tests or specs

Benchmark Tests

Test Driven Design Refac

tor A

sser

tions

Refactor Test Classes

???

Page 158: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�147

Randomize Test Order

Require Assertion Call?

Incre

dibly

Fast

Tests

Parallelization by default

01

2

3

45

6 78

9

1011

Only meaningful assertions

Choice: tests or specs

Benchmark Tests

Test Driven Design Refac

tor A

sser

tions

Refactor Test Classes

???

Page 159: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�148

Randomize Test Order

Require Assertion Call?

Incre

dibly

Fast

Tests

Parallelization by default

01

2

3

45

6 78

9

1011

Only meaningful assertions

Choice: tests or specs

Benchmark Tests

Test Driven Design Refac

tor A

sser

tions

Refactor Test Classes

???

Page 160: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�149

Randomize Test Order

Require Assertion Call?

Incre

dibly

Fast

Tests

Parallelization by default

01

2

3

45

6 78

9

1011

Only meaningful assertions

Choice: tests or specs

Benchmark Tests

Test Driven Design Refac

tor A

sser

tions

Refactor Test Classes

???

Page 161: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�150

Randomize Test Order

Require Assertion Call?

Incre

dibly

Fast

Tests

Parallelization by default

01

2

3

45

6 78

9

1011

Only meaningful assertions

Choice: tests or specs

Benchmark Tests

Test Driven Design Refac

tor A

sser

tions

Refactor Test Classes

???

Page 162: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�151

Randomize Test Order

Require Assertion Call?

Incre

dibly

Fast

Tests

Parallelization by default

01

2

3

45

6 78

9

1011

Only meaningful assertions

Choice: tests or specs

Benchmark Tests

Test Driven Design Refac

tor A

sser

tions

Refactor Test Classes

???

Page 163: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�152

Randomize Test Order

Require Assertion Call?

Incre

dibly

Fast

Tests

Parallelization by default

01

2

3

45

6 78

9

1011

Only meaningful assertions

Choice: tests or specs

Benchmark Tests

Test Driven Design Refac

tor A

sser

tions

Refactor Test Classes

???

Page 164: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�153

Randomize Test Order

Require Assertion Call?

Incre

dibly

Fast

Tests

Parallelization by default

01

2

3

45

6 78

9

1011

Only meaningful assertions

Choice: tests or specs

Benchmark Tests

Test Driven Design Refac

tor A

sser

tions

Refactor Test Classes

???

Page 165: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Reproducibility

�154

Page 166: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Reproducibility is

Paramount�155

Page 167: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

--seed ###�156

Page 168: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

--name /pattern/

�157

Page 169: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

i_suck_and_my_tests_are_order_dependent!

�158

Page 170: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

No (less?) Dogma

�159

Page 171: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

I ❤ That!

�160

Page 172: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Not for Everyone

�161

Page 173: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Should It?

�162

Page 174: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

For me:

�163

Page 175: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Test First (red, green, refactor)

�164

Page 176: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

DTSTTCPW

�165

(do the simplest thing that could possibly work)

Page 177: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Mock Last

�166

Page 178: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�167

Page 179: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Simple.

�167

Page 180: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Simple.Statist.

�167

Page 181: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Simple.Statist.Tests.

�167

Page 182: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

“You should write a test for anything that could break”

—Kent Beck

�168

Page 183: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Major MT5 Changes

�169

Page 184: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Major namespace rename MiniTest::Unit::TestCase

-> Minitest::Test.

�170

Page 185: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Added Minitest::Benchmark

�171

Page 186: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

No Managers No Runners

�172

Page 187: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�173

MiniTest

MiniTest::Assertion

MiniTest::Unit::Guard

MiniTest::Assertions

MiniTest::Expectations

MiniTest::Unit::TestCase

MiniTest::Spec::DSL

MiniTest::Unit::LifecycleHooks

MiniTest::PrideIO

MiniTest::Unit

MiniTest::PrideLOL

MiniTest::Spec

MiniTest::Skip

Minitest::BacktraceFilter Minitest::ParallelEach Minitest::Mock

Minitest 4

Page 188: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�174

Minitest

Minitest::Runnable

Minitest::Reporter Minitest::Assertion

Minitest::Guard

Minitest::BacktraceFilter

Minitest::Assertions

Minitest::Expectations

Minitest::Test

Minitest::Benchmark Minitest::Spec::DSL

Minitest::Test::LifecycleHooks

Minitest::ParallelEach

Minitest::PrideIO

Minitest::PrideLOL

Minitest::BenchSpec

Minitest::Spec

Minitest::Skip Minitest::UnexpectedErrorMinitest::CompositeReporter

Minitest::Mock

Minitest 5

Page 189: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�175

MiniTest

Minitest::Runnable

Minitest::Reporter Minitest::Assertion

Minitest::Guard

Minitest::BacktraceFilter

Minitest::Assertions

Minitest::Expectations

Minitest::Test

Minitest::Benchmark Minitest::Spec::DSL

Minitest::Test::LifecycleHooks

Minitest::ParallelEach

Minitest::PrideIO

Minitest::PrideLOL

Minitest::BenchSpec

Minitest::Spec

Minitest::Skip Minitest::UnexpectedErrorMinitest::CompositeReporter

Minitest::Mock

MiniTest::Unit

MT4 -> MT5Minitest

Page 190: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Major MT6 Changes

�176

Page 191: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Architectural Changes in Minitest 6

�177

Page 192: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Same Namespace!

�178

Page 193: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Same Classes!

�179

Page 194: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

No Cruft!

�180

Page 195: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

5.12.0 MT5 w/ deprecations on. 5.11.x MT5 w/o deprecations.5.3.3 Un-shuffled test suites.

Compatibility Chart

�181

Page 196: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Yeah Yeah

�182

Page 197: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Parallelism

�183

Page 198: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

parallelize_me!

�184

Page 199: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Make parallel the default?

�185

Page 200: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

serialize_me!

�186

Page 201: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Testing @ Scale Implementations

That Scale�187

Page 202: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

All Tests, Completely

Shuffled�188

Page 203: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Distributed Testing

�189

Page 204: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Distribute Locally

�190

Page 205: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Use all your CPUs!

�191

Page 206: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

jeremyevans/minitest-parallel_fork 2 forks 4 forks spec_core: 1.25x - 1.36x 1.5x spec_model: 1.29x - 1.62x 1.72x - 2.02x spec_plugin: 1.57x - 1.76x 2.29x - 2.37x spec_sqlite: 1.75x - 1.86x 2.26x - 2.65x spec_postgres: 1.32x - 1.40x Untested

�192

Page 207: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Distribute Across VMs

�193

Page 208: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Speed Up CI

�194

Page 209: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Config? Setup?

�195

Page 210: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Minitest will expect:SSH accessOpen ports (or tunneling?)Same source layout

�196

Page 211: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Safe to Assume?

�197

Page 212: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Distribution / Parallelism libraries:

tmm1/test-queuejeremyevans/minitest-parallel_forkArturT/knapsack

�198

Page 213: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Serialization Guarantees

�199

Page 214: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

No Marshal Code

�200

Page 215: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Added Result

�201

Page 216: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Disconnected from Test

�202

Page 217: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Better Parallel & Distributed Testing

�203

Page 218: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Better GC

�204

Page 219: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Ruby 2.5 Exceptions?

�205

Page 220: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

CleanerProject

�206

Page 221: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Split Files

�207

Page 222: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Cleaner Call Stack

�208

Page 223: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Not Sure

�209

Page 224: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Current StackMinitest.autorun Minitest.run(args) Minitest.__run(reporter, options) Runnable.runnables.each do |runnable| runnable.run(reporter, options) self.runnable_methods.each self.run_one_method(self, method, reporter) Minitest.run_one_method(klass, method) klass.new(runnable_method).run

�210

Page 225: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Minor RefactoringMinitest.autorun Minitest.run(args) Minitest.__run(reporter, options) methods = filter Runnable.runnables methods.each do |runnable| runnable.run(reporter, options) self.runnable_methods.each self.run_one_method(self, method, reporter) Minitest.run_one_method(klass, method) klass.new(runnable_method).run

�211

Page 226: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Dream RefactoringMinitest.autorun Minitest.run(args) Minitest.__run(reporter, options) methods = filter Runnable.runnables methods.shuffle.each do |(runnable, method)| runnable.run(reporter, options) self.runnable_methods.each self.run_one_method(self, method, reporter) Minitest.run_one_method(klass, method) klass.new(runnable_method).run

�212

Page 227: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Dream VersionMinitest.autorun Minitest.run(args) Minitest.__run(reporter, options) methods = filter Runnable.runnables methods.shuffle.each do |(runnable, method)| runnable.run_one_method(self, method, reporter) Minitest.run_one_method(klass, method) klass.new(runnable_method).run

�213

Page 228: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Too Far?

�214

Page 229: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Parallel By Default

�215

Page 230: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Powerful!

�216

Page 231: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Problematic

�217

Page 232: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

DB Testing (non-transactional)

�218

Page 233: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Time.now�219

Page 234: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Code Changes

�220

Page 235: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

command-line runner

�221

Page 236: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

bin/minitest

�222

Page 237: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Better Integration eg: s/minitest/minitest_bisect/

�223

Page 238: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Rake’s TestTask

�224

Page 239: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

minitest/test.rake

�225

Page 240: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Improved Mocks/Stubs

�226

Page 241: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

stub w/ blocks

�227

Page 242: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Adding fake?obj = fake a:42

assert_equal 42, obj.a

�228

Page 243: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Too Simple?def fake attribs obj = Object.new attribs.each do |name, value| obj.define_singleton_method name do value end end obj end

�229

Page 244: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Stricter and Better Assertions.

�230

Page 245: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

assert_equal(nil, x) => Failure

�231

Page 246: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

More Explicit Signals Intent

�232

Page 247: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Fix Tautological

Tests�233

http://randycoulman.com/blog/2016/12/20/tautological-tests/

Page 248: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Assertion Reuse

�234

Page 249: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

assert_operator assert_predicate

call assert_respond_to

�235

Page 250: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Better FailuresFailure: Expected X to respond to message.

instead of:

Error: NoMethodError (undefined method `message’ for #<X:Y>).

�236

Page 251: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Better Failure Messages

�237

Page 252: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Especially w/ layered assertions

�238

Page 253: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Removed assert_send

�239

Page 254: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Improved Specs

�240

Page 255: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

No more expectations on Object- class Object # :nodoc: - include Minitest::Expectations unless ENV["MT_NO_EXPECTATIONS"] - end

�241

Page 256: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Easy Conversion# beforeo.m.must_equal 42

# after_(o.m).must_equal 42

�242

Page 257: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Easy Conversion# beforeo.m.must_equal 42

# after_(o.m).must_equal 42value(o.m).must_equal 42 # or

�242

Page 258: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Easy Conversion# beforeo.m.must_equal 42

# after_(o.m).must_equal 42value(o.m).must_equal 42 # orexpect(o.m).must_equal 42 # ugh

�242

Page 259: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Much Cleaner

�243

Page 260: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Closing

�244

Page 261: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Introduction History

Philosophy�245

Page 262: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Major Changes

�246

Page 263: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Architectural

�247

Page 264: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Parallelism

�248

Page 265: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Distributed Testing &

Serialization�249

Page 266: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Call Stack

�250

Page 267: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Code Changes

�251

Page 268: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

bin/minitest

�252

Page 269: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

minitest/test.rake

�253

Page 270: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

minitest/mock

�254

Page 271: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Improved Assertions

�255

Page 272: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Cleaner Specs

�256

Page 273: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�257

Randomize Test Order

Require Assertion Call?

Incre

dibly

Fast

Tests

Parallelization by default

01

2

3

45

6 78

9

1011

Only meaningful assertions

Choice: tests or specs

Benchmark Tests

Test Driven Design Refac

tor A

sser

tions

Refactor Test Classes

Distributed Testing

Page 274: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider�258

https://xkcd.com/670/

Page 275: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

That’s It!

�259

Page 276: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Schedule?

�260

Page 277: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Schedule?Unknown!

�260

Page 278: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Schedule?Unknown!

Soon?!?�260

Page 279: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Weeks to months

�261

Page 280: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Not Longer (I hope?)

�262

Page 281: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

I could use feedback and help!

�263

Page 282: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Current draft is available at https://github.com/zenspider/minitest

on the mt6 branch.�264

Page 283: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Thank You

Page 284: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Thank YouIf you want to sponsor my work on Open Source:

Page 285: Minitest 6: Test Feistier! Ryan Davis, Seattle.rb Minitest 6 · Presentation Sammich 7. Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb

Minitest 6: Test Feistier!

RailsConf 2018, Pittsburgh, PA

Ryan Davis, Seattle.rb 

@the_zenspider

Thank YouIf you want to sponsor my work on Open Source:

https://www.patreon.com/zenspider