geek talk backend unit testing in go language

40
Define Data Unit Testing in Go Language

Upload: haluan-irsad

Post on 19-Mar-2017

25 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Geek Talk Backend Unit Testing in Go Language

DefineDataUnit Testing in Go Language

Page 2: Geek Talk Backend Unit Testing in Go Language

UnitTestinginGoLanguageBy:HaluanMohammadIrsad

Page 3: Geek Talk Backend Unit Testing in Go Language

1.IntrotoGoLanguage

Page 4: Geek Talk Backend Unit Testing in Go Language

AllAboutGo

� CreatedatGoogle@2007byRobPike,RobGriesemer,andKenThompson

� OpenSource� Cbasedlanguage� Compiled� ConcurrentProgramming� Platform:Linux,OSX,Windows,BSD,andUnix

Page 5: Geek Talk Backend Unit Testing in Go Language

NotableUsers

� CloudFlare� Docker� Dropbox� Google(fordownloadserverdl.google.com)� SoundCloud� Uber (forhandlinghighvolumesofgeofence-basedqueries)

Source:https://en.wikipedia.org/wiki/Go_(programming_language)

Page 6: Geek Talk Backend Unit Testing in Go Language

2.GoTestingPhilosophy

Page 7: Geek Talk Backend Unit Testing in Go Language

Howtowrite?

� Alwaysimport"testing"package� Thetestfile,shouldendwith“_test”

� Ex:main_test.go

� Puttestfilesinseparatepackage� Ex:Ifyouwanttotestmainpackage,putmain_test.go inpackagemain_test

Page 8: Geek Talk Backend Unit Testing in Go Language

3.UnitTestingTools

Page 9: Geek Talk Backend Unit Testing in Go Language

Tools

a. Gory,createsignaturesforunittestingb. Gomega,amatcher(assertion)library

Page 10: Geek Talk Backend Unit Testing in Go Language

Whyweneedsignatures?

� RepresentDataStructure� Consistency� Re-usability

Page 11: Geek Talk Backend Unit Testing in Go Language

Gory

Gorykeywords:� Define :Toconstructafactory� Factory :Factorymapsfieldnamestovalues

Source:https://github.com/modocache/gory

Page 12: Geek Talk Backend Unit Testing in Go Language

Library

Page 13: Geek Talk Backend Unit Testing in Go Language

Implementation(1)

Page 14: Geek Talk Backend Unit Testing in Go Language

Implementation(2)

Page 15: Geek Talk Backend Unit Testing in Go Language

Whyweneedtestcases?

� Businessprocessvalidation� Dataflowvalidation� Onsuccessvalidation� Onfailurevalidation� Errorhandling

Page 16: Geek Talk Backend Unit Testing in Go Language

Gomega

Gomega keywords:� Describe&Context :(Expressively)Organizethebehaviorofcode� Beforeeach :Setupstateforspecs� AfterEach :Executeafterspecsexecuted� It :Specifysinglespec� Expect :Tomakeexpectationoftheresult

source:https://onsi.github.io/ginkgo/

Page 17: Geek Talk Backend Unit Testing in Go Language

Library

Page 18: Geek Talk Backend Unit Testing in Go Language

MainSuite

Page 19: Geek Talk Backend Unit Testing in Go Language

SubTask

Page 20: Geek Talk Backend Unit Testing in Go Language

Implementation(1)

Page 21: Geek Talk Backend Unit Testing in Go Language

Implementation(2)

Page 22: Geek Talk Backend Unit Testing in Go Language

Onfailureresult

Page 23: Geek Talk Backend Unit Testing in Go Language

OnSuccessresult

Page 24: Geek Talk Backend Unit Testing in Go Language

CodeCoverage

Page 25: Geek Talk Backend Unit Testing in Go Language

4.RaceCondition

Page 26: Geek Talk Backend Unit Testing in Go Language

RaceCondition

� How itcouldhappened?� How todetectit?

Page 27: Geek Talk Backend Unit Testing in Go Language

Isthisaracecondition?

Page 28: Geek Talk Backend Unit Testing in Go Language

DefinitionofRaceCondition

� A“racecondition”canbedefinedas“Anomalousbehaviorduetounexpectedcriticaldependenceontherelativetimingofevents”.

� Raceconditionsgenerallyinvolveoneormoreprocessesaccessingasharedresource(suchafileorvariable),wherethismultipleaccesshasnotbeenproperlycontrolled.

Page 29: Geek Talk Backend Unit Testing in Go Language

DetectRaceCondition

� Gobydefaulthascreate‘--race’todetectracecondition,simplyadditafter‘gotest’.Soitwillbe‘gotest--race’

� Isthis‘really’work?

Page 30: Geek Talk Backend Unit Testing in Go Language

Codethatpossiblyraisearacecondition

Page 31: Geek Talk Backend Unit Testing in Go Language

Beforeadd“RunnerRun” Afteradd“RunnerRun”

Rungotest

Page 32: Geek Talk Backend Unit Testing in Go Language

It’sokay,andseemsnoproblem

Page 33: Geek Talk Backend Unit Testing in Go Language

run“gotest--race”

Page 34: Geek Talk Backend Unit Testing in Go Language

Finally,Iwatcharacehere:))

Page 35: Geek Talk Backend Unit Testing in Go Language

WhatIactuallysee

Page 36: Geek Talk Backend Unit Testing in Go Language

Thereality

Page 37: Geek Talk Backend Unit Testing in Go Language

Before After

Solution

Page 38: Geek Talk Backend Unit Testing in Go Language

Runagain..

Page 39: Geek Talk Backend Unit Testing in Go Language

ChangeBackAgainandRunTest

Page 40: Geek Talk Backend Unit Testing in Go Language

FinFin.