⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basebotestcase.java

📁 A Java web application, based on Struts and Hibernate, that serves as an online running log. Users m
💻 JAVA
字号:
package net.sf.irunninglog.businessobject;

import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import net.sf.irunninglog.junit.BaseTestCase;
import net.sf.irunninglog.util.ConstantValues;
import net.sf.irunninglog.util.ConversionException;
import net.sf.irunninglog.util.Conversions;
import net.sf.irunninglog.util.DTO;
import net.sf.irunninglog.util.FatalRuntimeException;
import net.sf.irunninglog.util.Utilities;
import net.sf.irunninglog.validation.ValidationException;

public abstract class BaseBOTestCase extends BaseTestCase {

    protected BaseBO bo;

    public BaseBOTestCase(String name) {
        super(name);
    }

    // JUNIT METHODS

    public void setUp() {
        try {
            bo =  (BaseBO) BusinessObjectFactory.newInstance(getBOType());
        } catch (Exception ex) {
            throw new FatalRuntimeException(ex);
        }
    }

    public void testFields() {}

    protected void executeStringFieldTests(String fieldName) {
        Object [] objs = new Object[] {null, ConstantValues.STRING_BLANK, STRING_FOO};

        Object [] results = executeFieldTests(fieldName, String.class, objs);

        for (int i=0; i<objs.length; i++) {
            assertEquals(objs[i], results[i]);
        }
    }

    protected void executeDecimalFieldTests(String fieldName) {
        Object [] objs = new Object [] {null, ConstantValues.BD_ZERO};

        Object [] results = executeFieldTests(fieldName, BigDecimal.class, objs);

        for (int i=0; i<objs.length; i++) {
            assertEquals(objs[i], results[i]);
        }
    }

    protected void executeLongFieldTests(String fieldName) {
        Object [] objs = new Object [] {null, new Long(0)};

        Object [] results = executeFieldTests(fieldName, Long.class, objs);

        for (int i=0; i<objs.length; i++) {
            assertEquals(objs[i], results[i]);
        }
    }

    protected void executeBooleanFieldTests(String fieldName) {
        Object [] objs = new Object [] {Boolean.TRUE, Boolean.FALSE};

        Object [] results = executeFieldTests(fieldName, Boolean.class, objs);

        for (int i=0; i<objs.length; i++) {
            assertEquals(objs[i], results[i]);
        }
    }

    protected void executeDateFieldTests(String fieldName) {
        Object [] objs = new Object [] {null, new Date()};

        Object [] results = executeFieldTests(fieldName, Date.class, objs);

        for (int i=0; i<objs.length; i++) {
            assertEquals(objs[i], results[i]);
        }
    }

    private Object [] executeFieldTests(String fieldName, Class fieldClass, Object [] params) {
        try {
            Object [] results = new Object[params.length];

            String first = fieldName.substring(0, 1).toUpperCase();
            fieldName = first + fieldName.substring(1, fieldName.length());
            Method getter = findGetter(fieldName, fieldClass);
            Method setter = findSetter(fieldName, fieldClass);

            assertNotNull(getter);
            assertNotNull(setter);

            for (int i = 0; i < params.length; i++) {
                setter.invoke(bo, new Object[] {params[i]});
                results[i] = getter.invoke(bo, null);
            }

            return results;
        } catch (Exception ex) {
            LOG.fatal("Unable to perform field tests ", ex);
            failTest();
            return null;
        }
    }

    public void testGetValues() {
        DTO values = bo.getValues();
        assertNotNull(values);
        assertNotNull(values.getCanonicalId());
        assertEquals(getDTOCanonicalId(), values.getCanonicalId());
    }

    public void testGetValuesInternal() {
        DTO values = bo.getValuesInternal();
        assertNotNull(values);
        assertNotNull(values.getCanonicalId());
        assertEquals(getDTOCanonicalId(), values.getCanonicalId());
    }

    public void testSetValues() { }

    protected void executeSetValuesTests(String fieldName, String [] validValues, String [] invalidValues) {
        DTO values = getValidDTO();

        try {
            bo.setValues(null);
            failTest();
        } catch (NullPointerException ex) {
            assertTrue(true);
        } catch (Throwable ex) {
            LOG.error("Test Failed", ex);
            failTest();
        }

        try {
            bo.setValues(values);
        } catch (Throwable ex) {
            LOG.fatal("Test Failed " + values, ex);
            failTest();
        }

        for (int i=0; i<validValues.length;i++) {
            values = getValidDTO();
            values.setValue(fieldName, validValues[i]);
            try {
                bo.setValues(values);
            } catch (Throwable ex) {
                LOG.fatal("Test Failed for "+fieldName+"/"+validValues[i], ex);
                failTest();
            }
        }

        for (int i=0; i<invalidValues.length; i++) {
            values = getValidDTO();
            values.setValue(fieldName, invalidValues[i]);
            try {
                bo.setValues(values);
                failTest();
            } catch (ValidationException ex) {
                assertNotNull(ex.getErrors());
                assertTrue(ex.getErrors().size() > 0);
            }catch (Throwable ex) {
                LOG.fatal("Test Failed for "+fieldName+"/"+invalidValues[i], ex);
                failTest();
            }
        }
    }

    public void testSetValuesInternal() { }

    protected void executeSetValuesInternalTests(String fieldName, Class fieldClass, String [] validValues, String [] invalidValues) {
        DTO values = getValidDTO();
        DTO output = null;
        Method getter = null;

        try {
            getter = findGetter(fieldName, fieldClass);
            bo.setValuesInternal(null);
            failTest();
        } catch (NullPointerException ex) {
            assertTrue(true);
        } catch (Throwable ex) {
            LOG.fatal("Test Failed", ex);
            failTest();
        }

        try {
            bo.setValuesInternal(values);
        } catch (Throwable ex) {
            LOG.error("Test Failed", ex);
            failTest();
        }

        for (int i=0; i<validValues.length;i++) {
            values = getValidDTO();
            values.setValue(fieldName, validValues[i]);
            String expected = Utilities.isBlank(validValues[i]) ? null : validValues[i];
            try {
                bo.setValuesInternal(values);
                output = bo.getValues();
                if (expected != null && fieldClass == Boolean.class) {
                    expected = Conversions.stringToBoolean(expected).toString();
                }else if (expected != null && fieldClass == Date.class) {
                    Date date = Conversions.stringToDate(expected);
                    expected = Conversions.dateToString(date);
                }else if (expected != null && fieldClass == BigDecimal.class) {
                    BigDecimal dec = Conversions.stringToDecimal(expected);
                    expected = Conversions.decimalToString(dec);
                }else if (expected != null && fieldClass == Long.class) {
                    Long l = Conversions.stringToTime(expected);
                    expected = Conversions.timeToString(l);
                } else if (expected == null && fieldClass == Boolean.TYPE) {
                    expected = ConstantValues.STRING_FALSE;
                }

                assertEquals(expected, output.getValue(fieldName));
                if (fieldClass == Boolean.class) {
                    assertEquals(Conversions.stringToBoolean(expected), (Boolean) getter.invoke(bo, null));
                } else if (fieldClass == BigDecimal.class) {
                    assertEquals(Conversions.stringToDecimal(expected), (BigDecimal) getter.invoke(bo, null));
                } else if (fieldClass == Date.class) {
                    assertEquals(Conversions.stringToDate(expected), (Date) getter.invoke(bo, null));
                } else if (fieldClass == Long.class) {
                    assertEquals(Conversions.stringToTime(expected), (Long) getter.invoke(bo, null));
                } else {
                    assertEquals(expected, getter.invoke(bo, null));
                }
            } catch (Throwable ex) {
                LOG.fatal("Test Failed ", ex);
                LOG.fatal("Test Failed " + " " + validValues[i] + " " + expected + " " + output.getValue(fieldName));
                failTest();
            }
        }

        for (int i=0; i<invalidValues.length; i++) {
            values = getValidDTO();
            values.setValue(fieldName, invalidValues[i]);
            try {
                bo.setValuesInternal(values);
                failTest();
            } catch (ConversionException ex) {
                assertTrue(true);
            } catch (Throwable ex) {
                LOG.fatal("Test Failed " +fieldName+"/"+invalidValues[i], ex);
                failTest();
            }
        }
    }

    public void testValidateValues() { }

    protected void executeValidateValuesTests(String fieldName, String [] validValues, String [] invalidValues) {
        DTO values = getValidDTO();
        List errors = null;

        try {
            bo.validateValues(null);
            failTest();
        } catch (IllegalArgumentException ex) {
            assertTrue(true);
        } catch (Throwable ex) {
            failTest();
        }

        errors = bo.validateValues(values);
        assertNotNull(errors);
        assertEquals(0, errors.size());

        for (int i=0; i<validValues.length;i++) {
            values = getValidDTO();
            values.setValue(fieldName, validValues[i]);
            errors = bo.validateValues(values);
            assertNotNull(errors);
            assertEquals(0, errors.size());
        }

        for (int i=0; i<invalidValues.length;i++) {
            values = getValidDTO();
            values.setValue(fieldName, invalidValues[i]);
            errors = bo.validateValues(values);
            assertNotNull(errors);
            assertTrue(errors.size() > 0);
        }
    }

    public void testDefaultValues() { }

    protected void executeDefaultValuesTests(String fieldName, String expected) {
        DTO values = getNewDTO();

        try {
            bo.defaultValues(null);
        } catch (NullPointerException ex) {
            // Don't care about this
            assertTrue(true);
        } catch (Throwable ex) {
            LOG.error("Test Failed", ex);
            failTest();
        }

        values.setValue(fieldName, null);
        bo.defaultValues(values);
        assertEquals(expected, values.getValue(fieldName));

        values.setValue(fieldName, ConstantValues.STRING_BLANK);
        bo.defaultValues(values);
        assertEquals(expected, values.getValue(fieldName));

        values.setValue(fieldName, STRING_FOO);
        bo.defaultValues(values);
        assertEquals(STRING_FOO, values.getValue(fieldName));
    }

    public void testPrimaryKey() { }

    // UTILITY METHODS

    protected abstract String getBOType();

    protected DTO getNewDTO() {
        return new DTO(getDTOCanonicalId());
    }

    protected abstract DTO getValidDTO();

    protected abstract String getDTOCanonicalId();

    private Method findGetter(String fieldName, Class clazz) throws Exception {
        Method getter = null;
        String first = fieldName.substring(0, 1).toUpperCase();
        fieldName = first + fieldName.substring(1, fieldName.length());

        if (clazz == (Boolean.class)) {
            getter = bo.getClass().getMethod("is" + fieldName, null);
        } else {
            getter = bo.getClass().getMethod("get" + fieldName, null);
        }
        return getter;
    }

    private Method findSetter(String fieldName, Class clazz) throws Exception {
        Method setter = null;
        String first = fieldName.substring(0, 1).toUpperCase();
        fieldName = first + fieldName.substring(1, fieldName.length());

        return bo.getClass().getMethod("set" + fieldName, new Class[] {clazz});
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -