README ¶
clockwork
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
my_func(c)
// Ensure we wait until my_func is sleeping
c.BlockUntil(1)
assert_state()
// Advance the FakeClock forward in time
c.Advance(3)
assert_state()
}
and in production builds, simply inject the real clock instead:
my_func(clockwork.NewRealClock())
See example_test.go for a full example.
Credits
Inspired by @wickman's threaded fake clock, and the [Golang playground](http://blog.golang.org/playground#Faking time)
Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Clock ¶
type Clock interface { After(d time.Duration) <-chan time.Time Sleep(d time.Duration) Now() time.Time }
Clock provides an interface that packages can use instead of directly using the time module, so that chronology-related behavior can be tested
func NewRealClock ¶
func NewRealClock() Clock
NewRealClock returns a Clock which simply delegates calls to the actual time package; it should be used by packages in production.
type FakeClock ¶
type FakeClock interface { Clock // Advance advances the FakeClock to a new point in time, ensuring any existing // sleepers are notified appropriately before returning Advance(d time.Duration) // BlockUntil will block until the FakeClock has the given number of // sleepers (callers of Sleep or After) BlockUntil(n int) }
FakeClock provides an interface for a clock which can be manually advanced through time
func NewFakeClock ¶
func NewFakeClock() FakeClock
NewFakeClock returns a FakeClock implementation which can be manually advanced through time for testing.