Preferably, if you find yourself needing an interface that only has A, make an interface that only has A, and have your function use that interface. :)
But that is a neat trick for when the above isn't possible for whatever reason. On Thu, Oct 31, 2013 at 3:43 PM, Tim Penhey <[email protected]>wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On 01/11/13 01:57, John Arbash Meinel wrote: > > On 2013-10-31 16:21, Andrew Wilkins wrote: > >> Does anybody object to converting the public entity structs in > >> state to interfaces? i.e. State, Machine, Unit, etc. > > > >> I'd like to write some tests for new code that depends on state. > >> Setting up mongo and so on is overkill. and should be relegated > >> to integration testing. > > > > I would say that if you want an interface you probably don't need > > the whole set of functions that Unit/Machine/etc provide. And a > > smaller interface means you don't have to create a fake one that > > has a bunch of methods you don't actually use. > > > > Something to think about, at least. > > > > I personally like having interfaces, but I'm not sure that all of > > Unit/Machine/etc need to be turned into an interface. There are > > already a few that we have (like Entity, etc). > > I would also like to see interfaces used more. However I don't like > huge interfaces. Consider the interface segregation principle [1] > > While I'm complaining, please don't append "er" to the end of all the > interfaces, this is kinda horrible. > > As a side note, this is a trick that I have been using in tests when > mocking interfaces. > > package foo > > type SomeInterface interface { > A() > B() > C() > } > > and in the test if I only need to call A, but need something that > supports the interface you can do this: > > type mockSomeInterface struct { > foo.SomeInterface > // whatever data I need in the test > } > > func (*mockSomeInterface) A() { > // do stuff > } > > Now &mockSomeInterface{} supports foo.SomeInterface, and A will work, > but any other call to a SomeInterface method will panic will a null > pointer dereference (or whatever it is called). > > Tim > > [1] http://en.wikipedia.org/wiki/Interface_segregation_principle > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.14 (GNU/Linux) > Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ > > iEYEARECAAYFAlJyssAACgkQd1fvI4G7WRAxNgCeKg412E0DWb+hkBr9NkLYiU0+ > KGAAnRmNxqxbPmmei9nVyMAtVYj75yq+ > =BRYr > -----END PGP SIGNATURE----- > > -- > Juju-dev mailing list > [email protected] > Modify settings or unsubscribe at: > https://lists.ubuntu.com/mailman/listinfo/juju-dev >
-- Juju-dev mailing list [email protected] Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/juju-dev
