blob: d126061de74e5f673cd2b0f292385cdbd58a6d86 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 by SAP AG, Walldorf.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.ws.jaxws.testutils.jmock;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import org.eclipse.jst.ws.jaxws.testutils.jmock.testcases.BeforeAfterEnabler;
import org.eclipse.jst.ws.jaxws.testutils.jmock.testcases.IBeforeAfterEnabled;
import org.jmock.core.CoreMock;
import org.jmock.core.DynamicMock;
import org.jmock.core.Verifiable;
/**
* An test case base class for mock objects test case. This one is roughly equivalent to org.jmock.cglib.MockObjectTestCase. There are several
* important differences though. This test case class assumes that the loader of the test case class is able to load both the class being mocked and
* the jmock classes. Thus test case class loader is used to create the mock type. This mock test case also provides two new <c>mock</c> methods.
* These methods can instantiate a mock for a given class by executing the class's constructor. The methods <c></c> and <c></c> inherited from
* <c>AbstractMockObjectTestCase</c> create mocks without executing the constructor of the mocked class. They use the SUN's reflection mechanism and
* are able to create classes without a visible default constructor or without constructor at all. This functionallity however is platform specific.
* It can be compiled and executed only on SUN VMs. Should the code be executed on another VM most likely a <c>NoClassDefFoundError</c> will ocurr.
*
* @author Hristo Sabev
*
*/
public abstract class MockObjectTestCase extends AbstractMockObjectTestCase implements IBeforeAfterEnabled
{
private final BeforeAfterEnabler bae = new BeforeAfterEnabler(this);
public void afterTestCase() throws Exception
{
}
public void beforeTestCase() throws Exception
{
}
public void runBareInternal() throws Throwable
{
super.runBare();
}
@Override
public void runBare() throws Throwable
{
bae.runBare();
}
private List<Mock<?>> mocksToVerify = new Vector<Mock<?>>();
/**
* Constructs a new <c>MockObjectTestCase</c> instance with no name
*
*/
public MockObjectTestCase()
{
}
public List<Mock<?>> getMocksToVerify()
{
final List<Mock<?>> copy = new ArrayList<Mock<?>>();
copy.addAll(mocksToVerify);
return copy;
}
@Override
public void unregisterToVerify(Verifiable arg0)
{
mocksToVerify.remove(arg0);
super.unregisterToVerify(arg0);
}
@Override
public void verify()
{
mocksToVerify.clear();
super.verify();
}
/**
* Constructs a new <c>MockObjectTestCase</c> instance with the specified name
*
* @param name -
* the name of this test case.
* @see junit.framework.TestCase
*/
public MockObjectTestCase(String name)
{
super(name);
}
@Override
protected <T> DynamicMock newCoreMock(Class<T> mockedType, String roleName)
{
return new CoreMock(mockedType, roleName);
}
}