<#-- FreeMarker template (see http://freemarker.org/) -->
<#assign licenseFirst = "/*">
<#assign licensePrefix = " * ">
<#assign licenseLast = " */">
<#include "${project.licensePath}">

<#if package?? && package != "">
package ${package};

</#if>
import junit.framework.TestCase;

/**
 *
 * @author ${user}
 */
public class ${name} extends TestCase {
    
    public ${name}(String testName) {
        super(testName);
    }

<#if methodSetUp!false>
    <#if useAnnotations!false>
    @Override
    </#if>
    protected void setUp() throws Exception {
        super.setUp();
    }

</#if>
<#if methodTearDown!false>
    <#if useAnnotations!false>
    @Override
    </#if>
    protected void tearDown() throws Exception {
        super.tearDown();
    }

</#if>
<#if testMethodsPlaceholder!false>
    // TODO add test methods here. The name must begin with 'test'. For example:
    // public void testHello() {}

</#if>
}
