All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.unitils.easymock.EasyMockUnitils Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2008,  Unitils.org
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.unitils.easymock;

import static org.easymock.EasyMock.reportMatcher;
import static org.unitils.reflectionassert.ReflectionComparatorMode.IGNORE_DEFAULTS;
import static org.unitils.reflectionassert.ReflectionComparatorMode.LENIENT_ORDER;

import org.easymock.EasyMock;
import org.easymock.internal.MocksControl;
import org.unitils.core.Unitils;
import org.unitils.core.UnitilsException;
import org.unitils.easymock.util.Calls;
import org.unitils.easymock.util.Dates;
import org.unitils.easymock.util.Defaults;
import org.unitils.easymock.util.InvocationOrder;
import org.unitils.easymock.util.Order;
import org.unitils.easymock.util.ReflectionArgumentMatcher;
import org.unitils.reflectionassert.ReflectionComparatorMode;

/**
 * Utility facade for handling EasyMock things such as replay or manually creating a mock.
 *
 * @author Tim Ducheyne
 * @author Filip Neven
 */
public class EasyMockUnitils {


    /**
     * Expects the given object argument but uses a reflection argument matcher to compare
     * the given value with the actual value during the test. The comparator modes are set to
     * ignore defaults and lenient order.
     * 

* Same as refEq with ignore defaults and lenient order as comparator modes. * * @param The type of the object to compare with * @param object the value * @return null */ public static T lenEq(T object) { return refEq(object, IGNORE_DEFAULTS, LENIENT_ORDER); } /** * Expects the given object argument but uses a reflection argument matcher with the given comparator modes * to compare the given value with the actual value during the test. * * @param the type of the object to compare with * @param object the value * @param modes the comparator modes * @return null */ public static T refEq(T object, ReflectionComparatorMode... modes) { ReflectionArgumentMatcher reflectionArgumentMatcher = new ReflectionArgumentMatcher(object, modes); reportMatcher(reflectionArgumentMatcher); return object; } /** * Creates a regular EasyMock mock object of the given type. *

* Same as {@link #createRegularMock(Class, InvocationOrder, Calls)} with a default invocation order * and default calls value. These defaults can be set in the unitils configuration. *

* An instance of the mock control is stored, so that it can be set to the replay/verify state when * {@link #replay()} or {@link #verify()} is called. * * @param the type of the mock * @param mockType the type of the mock, not null * @return a mock for the given class or interface, not null */ public static T createRegularMock(Class mockType) { return createRegularMock(mockType, InvocationOrder.DEFAULT, Calls.DEFAULT); } /** * Creates a regular EasyMock mock object of the given type. *

* An instance of the mock control is stored, so that it can be set to the replay/verify state when * {@link #replay()} or {@link #verify()} is called. * * @param the type of the mock * @param mockType the class type for the mock, not null * @param invocationOrder the order setting, not null * @param calls the calls setting, not null * @return a mock for the given class or interface, not null */ public static T createRegularMock(Class mockType, InvocationOrder invocationOrder, Calls calls) { return getEasyMockModule().createRegularMock(mockType, invocationOrder, calls); } /** * Creates a lenient mock object of the given type. The {@link org.unitils.easymock.util.LenientMocksControl} is used * for creating the mock. *

* Same as {@link #createMock(Class, InvocationOrder, Calls, Order, Dates, Defaults)} with a default invocation order, * default calls, default order, default dates and default defaults value. These defaults can be set in the * unitils configuration. *

* An instance of the mock control is stored, so that it can be set to the replay/verify state when * {@link #replay()} or {@link #verify()} is called. * * @param the type of the mock * @param mockType the type of the mock, not null * @return a mock for the given class or interface, not null */ public static T createMock(Class mockType) { return createMock(mockType, InvocationOrder.DEFAULT, Calls.DEFAULT, Order.DEFAULT, Dates.DEFAULT, Defaults.DEFAULT); } /** * Creates a lenient mock object of the given type. The {@link org.unitils.easymock.util.LenientMocksControl} is used * for creating the mock. *

* Same as {@link #createMock(Class, InvocationOrder, Calls, Order, Dates, Defaults)} with a default invocation order, * default calls, default order, default dates and default defaults value. These defaults can be set in the * unitils configuration. *

* An instance of the mock control is stored, so that it can be set to the replay/verify state when * {@link #replay()} or {@link #verify()} is called. * * @param the type of the mock * @param mockType the type of the mock, not null * @param invocationOrder the invocation order setting, not null * @param calls the calls setting, not null * @param order the order setting, not null * @param dates the dates setting, not null * @param defaults the defaults setting, not null * @return a mock for the given class or interface, not null */ public static T createMock(Class mockType, InvocationOrder invocationOrder, Calls calls, Order order, Dates dates, Defaults defaults) { return getEasyMockModule().createMock(mockType, invocationOrder, calls, order, dates, defaults); } /** * Unit tests should call this method after having set their recorded expected behavior on the mock objects. *

* This method makes sure EasyMock's replay method is called on every mock object that was supplied to the * fields annotated with {@link org.unitils.easymock.annotation.Mock}, or directly created by the * {@link #createRegularMock(Class, InvocationOrder, Calls)} and * {@link #createMock(Class, InvocationOrder, Calls, Order, Dates, Defaults)} methods. *

* After each test, the expected behavior is verified automatically, or explicitly by calling {@link #verify()}. */ public static void replay() { getEasyMockModule().replay(); } /** * If you create a mock with {@link EasyMock} than you can add the mock to the controllist in the {@link EasyMockModule} with this method. * @param object */ public static void addMockstoControlsList(Object... objects) { for (Object object : objects) { getEasyMockModule().addMocksControlToList(MocksControl.getControl(object)); } } public static void reset() { getEasyMockModule().reset(); } /** * Unit tests can call this method to check whether all recorded expected behavior was actually observed during * the test. *

* This method makes sure {@link org.easymock.internal.MocksControl#verify} method is called for every mock mock object * that was injected to a field annotated with {@link Mock}, or directly created by the * {@link #createRegularMock(Class, InvocationOrder, Calls)} or * {@link #createMock(Class, InvocationOrder, Calls, Order, Dates, Defaults)} methods. *

* By default, the expected behavior is verified automatically. This can be disabled however by setting the property * EasyMockModule.autoVerifyAfterTest.enabled to false. In that case, verification can also be performed explicitly * by calling this method. */ public static void verify() { getEasyMockModule().verify(); } /** * Gets the instance EasyMockModule that is registered in the modules repository. * This instance implements the actual behavior of the static methods in this class, such as {@link #replay()}. * This way, other implementations can be plugged in, while keeping the simplicity of using static methods. * * @return the instance, not null * @throws UnitilsException when no such module could be found */ private static EasyMockModule getEasyMockModule() { Unitils unitils = Unitils.getInstance(); EasyMockModule module = unitils.getModulesRepository().getModuleOfType(EasyMockModule.class); if (module == null) { throw new UnitilsException("Unable to find an instance of an EasyMockModule in the modules repository."); } return module; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy