Popularity
6.0
Growing
Activity
4.0
-
291
6
40

Programming language: Go
Tags: Utilities    
Latest version: v0.2.1

clockwork alternatives and similar packages

Based on the "Utilities" category

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.