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

How to make one instance object available to all tests?

PHPz
Release: 2024-02-15 17:27:11
forward
1086 people have browsed it

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)
}
Copy after login

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!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template