Home  >  Article  >  Backend Development  >  How to make one instance object available to all tests?

How to make one instance object available to all tests?

PHPz
PHPzforward
2024-02-15 17:27:111065browse

How to make one instance object available to all tests?

php editor Yuzai will introduce to you how to make an instance object available for use in all tests. When performing unit testing, we often need to create an instance object and reuse it in multiple test cases. In order to avoid the trouble of repeatedly creating objects, we can create an instance object before the test starts and save it as a property of the class by using the setUp() method. In this way, we can access this instance object in all test methods, thereby improving code reusability and testing efficiency. Next, let us look at the specific implementation method.

Question content

I am writing a component test for an http service. I have a test runner class that contains some useful structures and shared functions (mainly "make http calls" and "compare json structures"). The test runner class needs to have domains extracted from envvars for sending http calls. Instead of getting the domain from an environment variable every time I make an http call, I'd rather parse it once and set it in an instance of the test runner class and then have that instance available to all my test functions.

Assume the expected signature of the test function is func TestXxx(t *testing.T) {...} How can I make this instance available for my tests?

Code:

  • main.go - Use TestMain to get the domain from envvars and create an instance of the test runner class
  • testrunner.go - Helper classes that make http calls and verifying results easier
  • tests.go - The actual tests being run. I'm converting them to use golang's testing library, but you can see that currently they require a parameter (test runner instance)

Solution

Use package-level variables to store values. Initialize the value in the accessor function. Use sync.Once to ensure initialization is completed once.

type Helper struct {
    message string
}

var (
    helper     *Helper
    helperOnce sync.Once
)

func getHelper() *Helper {
    helperOnce.Do(func() {
        helper = &Helper{"Hello"}
    })
    return helper
}

func TestFirst(t *testing.T) {
    h := getHelper()
    t.Log(h.message)
}

func TestSecond(t *testing.T) {
    h := getHelper()
    t.Log(h.message)
}

https://www.php.cn/link/50d758cc9ab8bb51177b071d370caac2

The above is the detailed content of How to make one instance object available to all tests?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete
Previous article:goFiber http functionNext article:goFiber http function