Top Banner
Minitest 6: Test Feistier! RailsConf 2018, Pittsburgh, PA Ryan Davis, Seattle.rb @the_zenspider Minitest 6: Test Feistier!
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 ...

Jul 28, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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