FAQ
Wow I have totally missed that functionality! Seems a bit cryptic in the
struct section of the spec and not specifically mentioned, or perhaps I am
just dense. Is this ability meant for this kind of purpose or is this an
abuse?

Thanks for the help!
On Thursday, April 16, 2015 at 8:13:54 PM UTC-7, Paul Hankin wrote:
On Friday, 17 April 2015 10:16:07 UTC+9, jonathan...@gmail.com wrote:

Hello gophers!

I am trying to find what is idiomatic or even a good way to structure a
large "context". So this application has an interface Machine that has its
implementation switched out on different machines. Problem I have is with
testing. If I just want to stub out a single method of that interface I
have to create a stub struct with a bunch of empty functions, it becomes
unwieldy in tests. I have heard of three approaches, mock lib, split the
interface, and have a struct with function values.

Mock lib approach I would rather avoid.

Splitting the interface has the issue that now I have to pass around all
the split interfaces which are roughly equal in number to the functions in
Machine.
One approach that might work for you is to embed the Machine interface.
This gives you for "free" a test struct that implements the Machine
interface, and allows you to override specific methods for testing.

type machineF struct {
Machine
}

func (machineF) F() {
... stubbed method here.
}

In your test:
var mf machineF
... use mf as a Machine

--
Paul
--
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+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Search Discussions

Discussion Posts

Previous

Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 4 of 9 | next ›
Discussion Overview
groupgolang-nuts @
categoriesgo
postedApr 17, '15 at 1:15a
activeApr 17, '15 at 7:05p
posts9
users3
websitegolang.org

People

Translate

site design / logo © 2022 Grokbase