2018-11-28 22:41:16 +05:30
clockwork
=========
[![Build Status ](https://travis-ci.org/jonboulle/clockwork.png?branch=master )](https://travis-ci.org/jonboulle/clockwork)
2019-07-31 11:39:38 +05:30
[![godoc ](https://godoc.org/github.com/jonboulle/clockwork?status.svg )](http://godoc.org/github.com/jonboulle/clockwork)
2018-11-28 22:41:16 +05:30
a simple fake clock for golang
# Usage
Replace uses of the `time` package with the `clockwork.Clock` interface instead.
For example, instead of using `time.Sleep` directly:
```
func my_func() {
time.Sleep(3 * time.Second)
do_something()
}
```
inject a clock and use its `Sleep` method instead:
```
func my_func(clock clockwork.Clock) {
clock.Sleep(3 * time.Second)
do_something()
}
```
Now you can easily test `my_func` with a `FakeClock` :
```
func TestMyFunc(t *testing.T) {
c := clockwork.NewFakeClock()
// Start our sleepy function
2019-07-31 11:39:38 +05:30
my_func(c)
2018-11-28 22:41:16 +05:30
// Ensure we wait until my_func is sleeping
c.BlockUntil(1)
assert_state()
// Advance the FakeClock forward in time
2019-07-31 11:39:38 +05:30
c.Advance(3)
2018-11-28 22:41:16 +05:30
assert_state()
}
```
and in production builds, simply inject the real clock instead:
```
my_func(clockwork.NewRealClock())
```
See [example_test.go ](example_test.go ) for a full example.
# Credits
clockwork is inspired by @wickman 's [threaded fake clock ](https://gist.github.com/wickman/3840816 ), and the [Golang playground ](http://blog.golang.org/playground#Faking time )