package org.needle4j.mock;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.needle4j.junit.NeedleBuilders.needleRule;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Spy;
import org.needle4j.annotation.InjectInto;
import org.needle4j.annotation.ObjectUnderTest;
import org.needle4j.junit.NeedleRule;
import org.needle4j.mock.SpyProviderTest.A;
import org.needle4j.mock.SpyProviderTest.B;
public class SpyProviderWithExistingObjectTest {
@Rule
public final NeedleRule needle = needleRule().withMockProvider(MockitoProvider.class).build();
@ObjectUnderTest
@Spy
private A a;
// b becomes a spy, although it is already instantiated
@ObjectUnderTest
@InjectInto(targetComponentId = "a")
@Spy
private final B b = new B() {
@Override
public String getName() {
return "world";
}
};
@Test
public void shouldInjectSpyForA() {
when(b.getName()).thenReturn("world");
assertThat(a.hello(), is("hello world"));
verify(a).hello();
verify(b).getName();
}
}