Hi
Stephen Cameron wrote:
> The sequence of calls on the mock container to create the first object
> (newTransientInstance,
> persistIfNotAlready, flush), works fine but if that new object in turn
> creates more new objects,
> then no, as they don't know anything about the mock, you've injected that
> dependancy into the
> first one only. In my case there is a cascade of object creation
> newParticipant() may trigger
> newParticipation() and newPerson(). So all I can do is create a test for each
> of these methods
> (of domain services) individually and hope that it all works in combination
> in an integration
> test, which is reasonable I guess.
>
> But my point is that the thing to mock is the DI container. The class
> DomainObjectContainer
> isn't actually the DI 'container,' but a proxy, when running a Junit test
> there is no true
> container, but there is its proxy which we mock, its a subtle distinction.
My application has a cascade of create methods as well (which may be a good
idea or not)
and I was puzzled how to write unit.
I ended up 'injecting' referenced repositories/factories by hand in setUp():
[...]
public class RuntimeEnvironmentsTest_create {
@Rule
public JUnitRuleMockery2 context =
JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
@Mock
private DomainObjectContainer mockContainer;
@Mock
private Hosts hosts;
@Mock
private Releases releases;
@Mock
private Properties properties;
@Mock
public Stages stages;
private RuntimeEnvironments cut; // ClassUnderTest
@Before
public void setUp() throws Exception {
cut = new RuntimeEnvironments();
cut.setContainer(mockContainer);
cut.hosts = hosts;
cut.releases = releases;
cut.properties = properties;
cut.stages = stages;
}
[...]
}
Expectations for method calls on the mocked repositories/factories have to be
created.
HTH
Jörg
Kühne + Nagel (AG & Co.) KG
Rechtsform: Kommanditgesellschaft, Bremen HRA 21928, USt-IdNr.: DE 812773878.
Geschäftsleitung Kühne + Nagel (AG & Co.) KG: Reiner Heiken (Vors.), Dirk
Blesius, Martin Brinkmann, Matthias Heimbach, Jan-Hendrik Köstergarten,
Nicholas Minde, Lars Wedel, Jens Wollesen.
Persönlich haftende Gesellschafterin: Kühne & Nagel A.G., Rechtsform:
Aktiengesellschaft nach luxemburgischem Recht, HR-Nr.: B 18745,
Geschäftsführendes Verwaltungsratsmitglied: Karl Gernandt.
Geschäftsleitung Region Westeuropa: Yngve Ruud (Vors.), Richard Huhn, Björn
Johansson, Jan Kunze, Bruno Mang, Stefan Paul, Holger Ketz, Dominic Edmonds.
Wir arbeiten ausschließlich auf Grundlage der Allgemeinen Deutschen
Spediteursbedingungen (ADSp), jeweils neuester Fassung. Wir verweisen
insbesondere auf die vom Gesetz abweichenden Haftungsbeschränkungen von Ziffer
23 und 24 ADSp. Den vollständigen Text der ADSp übersenden wir Ihnen gerne auf
Anfrage und können Sie auch unter http://www.kuehne-nagel.com einsehen.
Ergänzend wird vereinbart, dass (1) Ziffer 27 ADSp im Rahmen internationaler
Übereinkommen weder unsere Haftung noch die Zurechnung des Verschuldens von
Leuten und sonstigen Dritten zu Gunsten des Auftraggebers erweitert, und (2)
wir in den im deutschen Seehandelsrecht aufgeführten Fällen des nautischen
Verschuldens oder Feuer an Bord nur für eigenes Verschulden und (3) im Sinne
der CMNI genannten Voraussetzungen nicht für nautisches Verschulden, Feuer an
Bord oder Mängel des Schiffes haften.