Guest User

Untitled

a guest
Jan 20th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.04 KB | None | 0 0
  1. type Clock interface {
  2. Now() time.Time
  3. After(d time.Duration) <-chan time.Time
  4. }
  5.  
  6. type realClock struct{}
  7. func (realClock) Now() time.Time { return time.Now() }
  8. func (realClock) After(d time.Duration) <-chan time.Time { return time.After(d) }
  9.  
  10. package main
  11.  
  12. import (
  13. "fmt"
  14. "time"
  15.  
  16. "github.com/bouk/monkey"
  17. )
  18.  
  19. func main() {
  20. wayback := time.Date(1974, time.May, 19, 1, 2, 3, 4, time.UTC)
  21. patch := monkey.Patch(time.Now, func() time.Time { return wayback })
  22. defer patch.Unpatch()
  23. fmt.Printf("It is now %sn", time.Now())
  24. }
  25.  
  26. func moonPhase(now func() time.Time) {
  27. if now == nil {
  28. now = time.Now
  29. }
  30.  
  31. // use now()...
  32. }
  33.  
  34. // Then dependent code uses just
  35. moonPhase(nil)
  36.  
  37. // And tests inject own version
  38. stubNow := func() time.Time { return time.Unix(1515151515, 0) }
  39. moonPhase(stubNow)
  40.  
  41. package foo
  42.  
  43. import "time"
  44.  
  45. var Now = time.Now
  46.  
  47. // The rest of your code...which calls Now() instead of time.Now()
  48.  
  49. package foo
  50.  
  51. import (
  52. "testing"
  53. "time"
  54. )
  55.  
  56. var Now = func() time.Time { return ... }
  57.  
  58. // Your tests
Add Comment
Please, Sign In to add comment