On 9 October 2015 at 15:39, Rade, Joerg / Kuehne + Nagel / Ham GI-PS <
[email protected]> wrote:

>
> 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.
>
>
Our code is very similar; I just use "mock" as a standard prefix for
everything that is mocked.

Also (you might like this or you might not) but one can do a poor-man's
simulation of C#'s object initializer syntax using double curly braces
(instance initializers).

Thus:

    @Mock
    private DomainObjectContainer mockContainer;
    @Mock
    private Hosts mockHosts;
    @Mock
    private Releases mockReleases;
    @Mock
    private Properties mockProperties;
    @Mock
    public Stages mockStages;

    private RuntimeEnvironments cut; // ClassUnderTest

    @Before
    public void setUp() throws Exception {
        cut = new RuntimeEnvironments() {{
            container = mockContainer;
            hosts = mockHosts;
            release = mockReleases;
            properties = mockProperties;
            stages = mockStages;
        }};
    }


(I tend not to use AbstractDomainObject anymore, instead just @Inject DOC
directly like any other service).

The double brace syntax is also quite nice if the test is in a different
package to the class under test (so long as you are happy to use protected
visibility), because the object that is instantiated is of course actually
a trivial subclass of the class being tested.


Cheers
Dan






> 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.
>

Reply via email to