/* * Copyright (c) 2006 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package mockit; import org.junit.*; import static org.junit.Assert.*; public final class TestedClassWithFieldDITest { static final class UtilityClass { String name; int id; Runnable action; Collaborator collaborator; } public static class TestedClass { static Runnable globalAction; protected final int i; protected Dependency dependency; public TestedClass() { i = -1; } public TestedClass(int i) { this.i = i; } public boolean doSomeOperation() { return dependency.doSomething() > 0; } } static class Dependency { int doSomething() { return -1; } } public static class Collaborator {} @Tested(availableDuringSetup = true) UtilityClass util; @Tested(availableDuringSetup = true, fullyInitialized = true) UtilityClass util2; @Injectable("util") String utilName; @Tested TestedClass tested; @Injectable Dependency dependency; @Before public void setUp() { assertUtilObjectsAreAvailable(); } void assertUtilObjectsAreAvailable() { assertNotNull(util); assertEquals("util", util.name); assertNull(util.collaborator); assertNotNull(util2); assertEquals("util", util2.name); assertNotNull(util2.collaborator); } @After public void tearDown() { assertUtilObjectsAreAvailable(); } @Test public void exerciseTestedObjectWithFieldInjectedByType() { assertEquals(-1, tested.i); assertSame(dependency, tested.dependency); new Expectations() {{ dependency.doSomething(); result = 23; times = 1; }}; assertTrue(tested.doSomeOperation()); } @Test public void exerciseTestedObjectCreatedThroughConstructorAndFieldInjection(@Injectable("123") int value) { assertEquals(0, util.id); assertEquals(123, tested.i); assertSame(dependency, tested.dependency); } @Test public void ignoreStaticFieldsWhenDoingFieldInjection(@Injectable Runnable action) { assertNull(util.action); assertNull(TestedClass.globalAction); } }