Home > Backend Development > Golang > golang interface for testing

golang interface for testing

PHPz
Release: 2024-02-09 09:57:15
forward
383 people have browsed it

用于测试的 golang 接口

php editor Strawberry introduces you to a golang interface for testing. In the software development process, testing is an indispensable link, and this interface provides convenient testing functions. Through this interface, developers can quickly check the correctness and stability of the code and improve development efficiency. Whether it is functional testing, performance testing or stress testing of interfaces, this tool can meet your needs. In addition, the interface also provides a concise and intuitive display of test results, allowing developers to understand the running status of the code more intuitively. Whether you are a beginner or an experienced developer, this golang interface can bring convenience and benefits to your development work.

Question content

I am trying to create a database simulation in my code, then I introduce an interface to my code to create the simulation:

This is my code (I don't know if this is the correct way)

package interfaces

type objectapi interface {
    findsomethingindatabase(ctx context.context, name string) (e.response, error)
}
Copy after login

My interface implementation is:

package repositories

func findsomethingindatabase(ctx context.context, name string) (e.response, error) {

    statement, err := db.sqlstatementwithctx(ctx,
        `select * 
         from table
         where name = ? limit 1`)

    row := statement.queryrowcontext(ctx, name)

    if err != nil {
        return e.response{}, err
    }

    statement.close()
    return toresponse(row), nil  //this method convert row database to e.response struct

}
Copy after login

Now I need to call the implementation of findsomethingindatabase from a method and then I receive an object type interface:

func CallImplementation(request *dto.XRequest, repo i.ObjectAPI) dto.XResponse{
    result := repo.FindSomethingInDatabase(request.Ctx, request.Name)
// more code
}
Copy after login

But now I don't know how to call callimplementation` to pass the object with implementation.

Call the method that passes the interface implementation

Solution

Interface descriptionType. Since your findsomethingindatabase implementation is just a func with no receiver, there is no type that implements interface objectapi.

You can pass a value of type func(ctx context.context, name string) (e.response, error) as a callback into callimplementation and get rid of the interface completely . Alternatively, keep the interface, define the type, and make that type the receiver of the current findsomethingindatabase implementation. You can then pass that type to callimplementation as it will now implement the objectapi interface. An example of the latter (which would be my preferred option for scalability):

type database struct {}

func (d *database) FindSomethingInDatabase(ctx context.Context, name string) (e.Response, error) {
    // ...
}

func CallImplementation(request *dto.XRequest, repo i.ObjectAPI) dto.XResponse{
    result := repo.FindSomethingInDatabase(request.Ctx, request.Name)
// more code
}

func main() {
    db := &database{}
    _ = Callimplementation(getRequest(), db)
}
Copy after login

In this case, you might want to store db as a member of database rather than making it a global variable (which seems to be the case now).

The above is the detailed content of golang interface for testing. 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