/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package org.eclipse.stem.diseasemodels.globalinfluenzamodel.tests;

import junit.framework.TestCase;

import junit.textui.TestRunner;

import org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel;
import org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelFactory;

/**
 * <!-- begin-user-doc -->
 * A test case for the model object '<em><b>Global Influenza Model</b></em>'.
 * <!-- end-user-doc -->
 * @generated
 */
public class GlobalInfluenzaModelTest extends TestCase {

	/**
	 * The fixture for this Global Influenza Model test case.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected GlobalInfluenzaModel fixture = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public static void main(String[] args) {
		TestRunner.run(GlobalInfluenzaModelTest.class);
	}

	/**
	 * Constructs a new Global Influenza Model test case with the given name.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public GlobalInfluenzaModelTest(String name) {
		super(name);
	}

	/**
	 * Sets the fixture for this Global Influenza Model test case.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected void setFixture(GlobalInfluenzaModel fixture) {
		this.fixture = fixture;
	}

	/**
	 * Returns the fixture for this Global Influenza Model test case.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected GlobalInfluenzaModel getFixture() {
		return fixture;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see junit.framework.TestCase#setUp()
	 * @generated
	 */
	@Override
	protected void setUp() throws Exception {
		setFixture(GlobalinfluenzamodelFactory.eINSTANCE.createGlobalInfluenzaModel());
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see junit.framework.TestCase#tearDown()
	 * @generated
	 */
	@Override
	protected void tearDown() throws Exception {
		setFixture(null);
	}

} //GlobalInfluenzaModelTest
