jonboulle/clockwork

GitHub: jonboulle/clockwork

Stars: 725 | Forks: 63

# clockwork [![Mentioned in Awesome Go](https://awesome.re/mentioned-badge-flat.svg)](https://github.com/avelino/awesome-go#utilities) [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/jonboulle/clockwork/ci.yaml?style=flat-square)](https://github.com/jonboulle/clockwork/actions?query=workflow%3ACI) [![Go Report Card](https://goreportcard.com/badge/github.com/jonboulle/clockwork?style=flat-square)](https://goreportcard.com/report/github.com/jonboulle/clockwork) ![Go Version](https://img.shields.io/badge/go%20version-%3E=1.15-61CFDD.svg?style=flat-square) [![go.dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](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分析