1package org.mockito.internal.verification;
2
3import org.junit.Before;
4import org.junit.Test;
5import org.mockito.Mock;
6import org.mockito.exceptions.base.MockitoAssertionError;
7import org.mockito.internal.verification.api.VerificationData;
8import org.mockito.verification.VerificationMode;
9
10import static junit.framework.TestCase.assertEquals;
11import static junit.framework.TestCase.fail;
12import static org.mockito.Mockito.doThrow;
13import static org.mockito.Mockito.verify;
14import static org.mockito.MockitoAnnotations.initMocks;
15
16public class DescriptionTest {
17
18    @Mock
19    private VerificationMode mockVerificationMode;
20
21    @Mock
22    private VerificationData mockVerificationData;
23
24    @Before
25    public void setUp() {
26        initMocks(this);
27    }
28
29    /**
30     * Test of verify method, of class Description. This test validates that the custom message is prepended to the
31     * error message when verification fails.
32     */
33    @Test
34    public void verification_failure_should_prepend_expected_message() {
35        String failureMessage = "message should be prepended to the original message";
36        String exceptionMessage = "original error message";
37        String expectedResult = failureMessage + "\n" + exceptionMessage;
38        MockitoAssertionError error = new MockitoAssertionError(exceptionMessage);
39        doThrow(error).when(mockVerificationMode).verify(mockVerificationData);
40
41        Description instance = new Description(mockVerificationMode, failureMessage);
42
43        try {
44            instance.verify(mockVerificationData);
45            verify(mockVerificationMode).verify(mockVerificationData);
46            fail("Should not have made it this far");
47
48        } catch (MockitoAssertionError e) {
49            assertEquals(expectedResult, e.getMessage());
50        }
51    }
52}
53