On Thu, Nov 4, 2021 at 8:41 AM Brian Candler <b.cand...@pobox.com> wrote:

> Perhaps he's thinking of something like pytest.  Simply by adding a named
> argument to your test function, a corresponding helper is called to create
> the value.  There is a 'yield' variation so that the helper can also handle
> cleanup after the test; and helpers can invoke other helpers in the same
> way.
>
> @pytest.yield_fixture(scope='function')
> def session():
>     db_session = make_session()
>     yield db_session
>     db_session.close()
>
> @pytest.fixture(scope='function')
> def customer(session):
>     c = Customer(name="Fred")
>     session.add(c)
>     return c
>
> # The actual tests
> def test_foo(session, customer):
>     assert session is not None
>     assert customer is not None
>
> def test_bar(session, customer):
>     ... another test
>

Compare that to Go:

func makeSession(t *testing.T) *Session {
    s = make_session()
    t.Cleanup(s.Close)
    return s
}

func makeCustomer(t *testing.T, s *Session) Customer {
    c = Customer{Name: "Fred"}
    s.Add(c)
    return c
}

// The actual tests
func TestFoo(t *testing.T) {
    s := makeSession(t)
    c := makeCustomer(t, s)
    // test code
}

ISTM the primary difference here is, that instead of adding `s *Session` to
`TestFoo`, you add a `s := makeSession(t)` statement. I just don't see that
as saving any significant amount of boilerplate. And if the complaint is
that you then have to actually pass the created session to `makeCustomer`,
you can always have a `makePopulatedSession` helper, if you have to do that
too often.

To be clear, I can see *some* benefit. Just not enough to offset the cost
of using an obscure tool and thus making it much harder for other Go
programmers to work on that project.

YMMV, of course, which is why I left it at "I don't know any such tool".


> It reduces the boilerplate somewhat - in go, each test would be something
> like
>
> func test_foo() {
>     session := make_session()
>     defer session.close()
>     customer := make_customer(session)
>     ... rest of test
> }
>
> which is actually not unreasonable IMO.
>
> pytest also lets you have objects with longer lifetimes (scopes), so that
> multiple tests within the same package or session can share the same object.
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/9dfa197a-fa6b-4db1-b231-1de872b0b8e4n%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/9dfa197a-fa6b-4db1-b231-1de872b0b8e4n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAEkBMfFQ0okmkZwqB%3D_GaCQH8Q9ECCiE7coM3Fb-8cL3pz32jg%40mail.gmail.com.

Reply via email to