package com.perunlabs.testinjector; import static com.perunlabs.testinjector.inject.TestInjector.injectTest; import static org.assertj.core.api.Assertions.assertThat; import org.junit.Test; import org.mockito.Mock; import org.mockito.internal.util.MockUtil; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.name.Named; public class MockTest { private static final String STRING = "abc"; @Test public void mocks_field_with_mockito_mock() throws Exception { MockField test = new MockField(); injectTest(test); assertThat(new MockUtil().isMock(test.mock)).isTrue(); } private static class MockField { @Mock Runnable mock; } @Test public void mocks_field() throws Exception { InjectMockField test = new InjectMockField(); injectTest(test); assertThat(test.mock).isSameAs(test.inject); } private static class InjectMockField { @Mock Runnable mock; @Inject Runnable inject; } @Test public void mocks_generic_field() throws Exception { GenericMockField test = new GenericMockField(); injectTest(test); assertThat(test.mock).isSameAs(test.inject); } private static class GenericMockField { @Mock Iterable<String> mock; @Inject Iterable<String> inject; } @Test public void mocks_annotated_field() throws Exception { AnnotatedMock test = new AnnotatedMock(); injectTest(test); assertThat(test.mock).isSameAs(test.inject); } private static class AnnotatedMock { @Mock @Named("x") public Runnable mock; @Inject @Named("x") public Runnable inject; } public void mocks_provider() throws Exception { ProviderField test = new ProviderField(); injectTest(test); assertThat(test.mock).isSameAs(test.inject); } private static class ProviderField { @Mock Provider<String> mock; @Inject Provider<String> inject; } @Test(expected = RuntimeException.class) public void mocking_raw_provider_fails() throws Exception { injectTest(new RawProvider()); } private static class RawProvider { @Mock @SuppressWarnings("rawtypes") Provider rawProvider; } @Test(expected = RuntimeException.class) public void mocking_wildcard_provider_fails() throws Exception { injectTest(new WildcardProvider()); } private static class WildcardProvider { @Mock Provider<?> rawProvider; } @Test(expected = RuntimeException.class) public void mocking_non_null_field_fails() throws Exception { NonNullField test = new NonNullField(); injectTest(test); } private static class NonNullField { @Mock String mock = STRING; } }