Popularity
6.7
Growing
Activity
5.6
Declining
598
10
57

Programming language: Go
License: Apache License 2.0
Tags: Utilities    
Latest version: v0.2.2

clockwork alternatives and similar packages

Based on the "Utilities" category.
Alternatively, view clockwork alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of clockwork or a related project?

Add another 'Utilities' Package

README

clockwork

Mentioned in Awesome Go

GitHub Workflow Status Go Report Card Go Version go.dev reference

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) {
    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 sleeping
    c.BlockUntil(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.

Credits

clockwork is inspired by @wickman's threaded fake clock, and the Golang playground

License

Apache License, Version 2.0. Please see [License File](LICENSE) for more information.


*Note that all licence references and agreements mentioned in the clockwork README section above are relevant to that project's source code only.