jonboulle/clockwork
GitHub: jonboulle/clockwork
Stars: 725 | Forks: 63
# clockwork
[](https://github.com/avelino/awesome-go#utilities)
[](https://github.com/jonboulle/clockwork/actions?query=workflow%3ACI)
[](https://goreportcard.com/report/github.com/jonboulle/clockwork)

[](https://pkg.go.dev/mod/github.com/jonboulle/clockwork)
**A simple fake clock for Go.**
## Usage
Replace uses of the `time` package with the `clockwork.Clock` interface instead.
For example, instead of using `time.Sleep` directly:
func myFunc() {
time.Sleep(3 * time.Second)
doSomething()
}
Inject a clock and use its `Sleep` method instead:
func myFunc(clock clockwork.Clock) {
clock.Sleep(3 * time.Second)
doSomething()
}
Now you can easily test `myFunc` with a `FakeClock`:
func TestMyFunc(t *testing.T) {
ctx := context.Background()
c := clockwork.NewFakeClock()
// Start our sleepy function
var wg sync.WaitGroup
wg.Add(1)
go func() {
myFunc(c)
wg.Done()
}()
// Ensure we wait until myFunc is waiting on the clock.
// Use a context to avoid blocking forever if something
// goes wrong.
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
defer cancel()
c.BlockUntilContext(ctx, 1)
assertState()
// Advance the FakeClock forward in time
c.Advance(3 * time.Second)
// Wait until the function completes
wg.Wait()
assertState()
}
and in production builds, simply inject the real clock instead:
myFunc(clockwork.NewRealClock())
See [example_test.go](example_test.go) for a full example.
## License
Apache License, Version 2.0. Please see [License File](LICENSE) for more information.
标签:EVTX分析