diff --git a/main/src/mockit/Tested.java b/main/src/mockit/Tested.java index 8f4ad3a3a..e9d6cb54d 100644 --- a/main/src/mockit/Tested.java +++ b/main/src/mockit/Tested.java @@ -84,6 +84,7 @@ * initialization of other objects. * Another potential use is to affect the initialization of other tested objects in the same test class, during their * creation after setup. + * Finally, objects made available during setup are also available during the execution of any tear-down methods. *

* In order to be made available during test setup, a tested object won't be injected from {@code @Injectable} * test method parameters, only from injectable fields. diff --git a/main/src/mockit/internal/expectations/injection/TestedField.java b/main/src/mockit/internal/expectations/injection/TestedField.java index b908ba0f3..7d5354514 100644 --- a/main/src/mockit/internal/expectations/injection/TestedField.java +++ b/main/src/mockit/internal/expectations/injection/TestedField.java @@ -85,8 +85,10 @@ void clearIfAutomaticCreation() if (createAutomatically) { injectionState.clearInstantiatedDependencies(); - Object testClassInstance = injectionState.getCurrentTestClassInstance(); - setFieldValue(testedField, testClassInstance, null); + if (!isAvailableDuringSetup()) { + Object testClassInstance = injectionState.getCurrentTestClassInstance(); + setFieldValue(testedField, testClassInstance, null); + } } } } diff --git a/main/test/mockit/TestedClassWithFieldDITest.java b/main/test/mockit/TestedClassWithFieldDITest.java index bbe9a608f..53ddb1219 100644 --- a/main/test/mockit/TestedClassWithFieldDITest.java +++ b/main/test/mockit/TestedClassWithFieldDITest.java @@ -4,8 +4,8 @@ */ package mockit; -import static org.junit.Assert.*; import org.junit.*; +import static org.junit.Assert.*; public final class TestedClassWithFieldDITest { @@ -14,6 +14,7 @@ static final class UtilityClass String name; int id; Runnable action; + Collaborator collaborator; } public static class TestedClass @@ -30,8 +31,10 @@ public static class TestedClass } 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; @@ -39,9 +42,25 @@ static class Dependency { int doSomething() { return -1; } } @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 diff --git a/main/test/mockit/integration/testng/TestedAndInjectablesTest.java b/main/test/mockit/integration/testng/TestedAndInjectablesTest.java index 2caf85d3b..7c57df14e 100644 --- a/main/test/mockit/integration/testng/TestedAndInjectablesTest.java +++ b/main/test/mockit/integration/testng/TestedAndInjectablesTest.java @@ -50,11 +50,22 @@ void useCollaborators() @BeforeMethod public void setUp() + { + assertUtilObjectIsAvailable(); + tested2 = new SUT(new Collaborator()); + } + + void assertUtilObjectIsAvailable() { assertNotNull(util); assertEquals(util.name, "util"); assertSame(collaborator1, util.collaborator1); - tested2 = new SUT(new Collaborator()); + } + + @AfterMethod + public void tearDown() + { + assertUtilObjectIsAvailable(); } @Test