/* * Copyright (c) 2007 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockitousage.annotation; import org.junit.Before; import org.junit.Test; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.exceptions.base.MockitoException; import org.mockitousage.IMethods; import org.mockitoutil.TestBase; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import static junit.framework.TestCase.*; import static org.mockito.Mockito.verify; public class AnnotationsTest extends TestBase { @Retention(RetentionPolicy.RUNTIME) public @interface NotAMock {} @Mock List<?> list; @Mock final Map<Integer, String> map = new HashMap<Integer, String>(); @NotAMock Set<?> notAMock; @Mock List<?> listTwo; @Before public void setup() { MockitoAnnotations.initMocks(this); } @Test public void shouldInitMocks() throws Exception { list.clear(); map.clear(); listTwo.clear(); verify(list).clear(); verify(map).clear(); verify(listTwo).clear(); } @Test public void shouldScreamWhenInitializingMocksForNullClass() throws Exception { try { MockitoAnnotations.initMocks(null); fail(); } catch (MockitoException e) { assertEquals("testClass cannot be null. For info how to use @Mock annotations see examples in javadoc for MockitoAnnotations class", e.getMessage()); } } @Test public void shouldLookForAnnotatedMocksInSuperClasses() throws Exception { Sub sub = new Sub(); MockitoAnnotations.initMocks(sub); assertNotNull(sub.getMock()); assertNotNull(sub.getBaseMock()); assertNotNull(sub.getSuperBaseMock()); } @Mock(answer = Answers.RETURNS_MOCKS, name = "i have a name") IMethods namedAndReturningMocks; @Mock(answer = Answers.RETURNS_DEFAULTS) IMethods returningDefaults; @Mock(extraInterfaces = {List.class}) IMethods hasExtraInterfaces; @Mock() IMethods noExtraConfig; @Test public void shouldInitMocksWithGivenSettings() throws Exception { assertEquals("i have a name", namedAndReturningMocks.toString()); assertNotNull(namedAndReturningMocks.iMethodsReturningMethod()); assertEquals("returningDefaults", returningDefaults.toString()); assertEquals(0, returningDefaults.intReturningMethod()); assertTrue(hasExtraInterfaces instanceof List); assertEquals(0, noExtraConfig.intReturningMethod()); } class SuperBase { @Mock private IMethods mock; public IMethods getSuperBaseMock() { return mock; } } class Base extends SuperBase { @Mock private IMethods mock; public IMethods getBaseMock() { return mock; } } class Sub extends Base { @Mock private IMethods mock; public IMethods getMock() { return mock; } } }