Skip to content

Commit

Permalink
Fix mockito#1346 - Different mocks are used for @mock and @InjectMock…
Browse files Browse the repository at this point in the history
… in the same test class with JUnit 5 extension
  • Loading branch information
SeriyBg committed Mar 26, 2018
1 parent 34877f1 commit eebd15b
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 8 deletions.
Expand Up @@ -5,6 +5,9 @@
package org.mockito.junit.jupiter;


import java.util.LinkedHashSet;
import java.util.Optional;
import java.util.Set;
import org.junit.jupiter.api.extension.AfterEachCallback;
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
Expand All @@ -15,10 +18,6 @@
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.quality.Strictness;

import java.util.LinkedList;
import java.util.List;
import java.util.Optional;

import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.create;
import static org.junit.platform.commons.support.AnnotationSupport.findAnnotation;

Expand Down Expand Up @@ -101,7 +100,7 @@ public void postProcessTestInstance(Object testInstance, ExtensionContext contex
*/
@Override
public void beforeEach(final ExtensionContext context) {
List<Object> testInstances = new LinkedList<>();
Set<Object> testInstances = new LinkedHashSet<>();
testInstances.add(context.getRequiredTestInstance());

this.collectParentTestInstances(context, testInstances);
Expand Down Expand Up @@ -135,7 +134,7 @@ private Optional<MockitoSettings> retrieveAnnotationFromTestClasses(final Extens
return annotation;
}

private void collectParentTestInstances(ExtensionContext context, List<Object> testInstances) {
private void collectParentTestInstances(ExtensionContext context, Set<Object> testInstances) {
Optional<ExtensionContext> parent = context.getParent();

while (parent.isPresent() && parent.get() != context.getRoot()) {
Expand Down
Expand Up @@ -4,15 +4,15 @@
*/
package org.mockitousage;

import java.util.function.Function;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

import java.util.function.Function;

import static org.assertj.core.api.Assertions.assertThat;

@ExtendWith(MockitoExtension.class)
Expand All @@ -21,6 +21,9 @@ class JunitJupiterTest {
@Mock
private Function<Integer, String> rootMock;

@InjectMocks
private ClassWithDependency classWithDependency;

@Test
void ensureMockCreationWorks() {
assertThat(rootMock).isNotNull();
Expand Down Expand Up @@ -70,4 +73,17 @@ void shouldWeCreateMocksInTheParentContext() {
assertThat(rootMock).isNotNull();
}
}

@Test
void should_be_injected_correct_instance_of_mock() {
assertThat(classWithDependency.dependency).isSameAs(rootMock);
}

private static class ClassWithDependency {
private final Function<Integer, String> dependency;

private ClassWithDependency(Function<Integer, String> dependency) {
this.dependency = dependency;
}
}
}

0 comments on commit eebd15b

Please sign in to comment.