/* * Copyright (c) 2007 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockitousage.stubbing; import org.junit.Assert; import org.junit.Test; import org.mockito.Mock; import org.mockitoutil.TestBase; import static junit.framework.TestCase.assertEquals; import static org.mockito.Mockito.*; public class CallingRealMethodTest extends TestBase { @Mock TestedObject mock; static class TestedObject { String value; void setValue(String value) { this.value = value; } String getValue() { return "HARD_CODED_RETURN_VALUE"; } String callInternalMethod() { return getValue(); } } @Test public void shouldAllowCallingInternalMethod() { when(mock.getValue()).thenReturn("foo"); when(mock.callInternalMethod()).thenCallRealMethod(); assertEquals("foo", mock.callInternalMethod()); } @Test public void shouldReturnRealValue() { when(mock.getValue()).thenCallRealMethod(); Assert.assertEquals("HARD_CODED_RETURN_VALUE", mock.getValue()); } @Test public void shouldExecuteRealMethod() { doCallRealMethod().when(mock).setValue(anyString()); mock.setValue("REAL_VALUE"); Assert.assertEquals("REAL_VALUE", mock.value); } @Test public void shouldCallRealMethodByDefault() { TestedObject mock = mock(TestedObject.class, CALLS_REAL_METHODS); Assert.assertEquals("HARD_CODED_RETURN_VALUE", mock.getValue()); } @Test public void shouldNotCallRealMethodWhenStubbedLater() { TestedObject mock = mock(TestedObject.class); when(mock.getValue()).thenCallRealMethod(); when(mock.getValue()).thenReturn("FAKE_VALUE"); Assert.assertEquals("FAKE_VALUE", mock.getValue()); } }