/* * Copyright (c) 2007 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockitousage.matchers; import org.junit.Before; import org.junit.Test; import org.mockito.exceptions.verification.junit.ArgumentsAreDifferent; import org.mockitoutil.TestBase; import static org.mockito.Matchers.refEq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @SuppressWarnings("all") public class ReflectionMatchersTest extends TestBase { class Parent { private int parentField; protected String protectedParentField; public Parent(int parentField, String protectedParentField) { this.parentField = parentField; this.protectedParentField = protectedParentField; } } class Child extends Parent { private int childFieldOne; private Object childFieldTwo; public Child(int parentField, String protectedParentField, int childFieldOne, Object childFieldTwo) { super(parentField, protectedParentField); this.childFieldOne = childFieldOne; this.childFieldTwo = childFieldTwo; } } interface MockMe { void run(Child child); } MockMe mock; @Before public void setup() { mock = mock(MockMe.class); Child actual = new Child(1, "foo", 2, "bar"); mock.run(actual); } @Test public void shouldMatchWhenFieldValuesEqual() throws Exception { Child wanted = new Child(1, "foo", 2, "bar"); verify(mock).run(refEq(wanted)); } @Test(expected=ArgumentsAreDifferent.class) public void shouldNotMatchWhenFieldValuesDiffer() throws Exception { Child wanted = new Child(1, "foo", 2, "bar XXX"); verify(mock).run(refEq(wanted)); } @Test(expected=ArgumentsAreDifferent.class) public void shouldNotMatchAgain() throws Exception { Child wanted = new Child(1, "foo", 999, "bar"); verify(mock).run(refEq(wanted)); } @Test(expected=ArgumentsAreDifferent.class) public void shouldNotMatchYetAgain() throws Exception { Child wanted = new Child(1, "XXXXX", 2, "bar"); verify(mock).run(refEq(wanted)); } @Test(expected=ArgumentsAreDifferent.class) public void shouldNotMatch() throws Exception { Child wanted = new Child(234234, "foo", 2, "bar"); verify(mock).run(refEq(wanted)); } @Test public void shouldMatchWhenFieldValuesEqualWithOneFieldExcluded() throws Exception { Child wanted = new Child(1, "foo", 2, "excluded"); verify(mock).run(refEq(wanted, "childFieldTwo")); } @Test public void shouldMatchWhenFieldValuesEqualWithTwoFieldsExcluded() throws Exception { Child wanted = new Child(234234, "foo", 2, "excluded"); verify(mock).run(refEq(wanted, "childFieldTwo", "parentField")); verify(mock).run(refEq(wanted, "parentField", "childFieldTwo")); } @Test(expected=ArgumentsAreDifferent.class) public void shouldNotMatchWithFieldsExclusion() throws Exception { Child wanted = new Child(234234, "foo", 2, "excluded"); verify(mock).run(refEq(wanted, "childFieldTwo")); } }