天天看點

JUnit中如何測試異常

2005-11-04

   很多時候,我們要寫一些單元測試來測試我們程式是否能正确觸發異常。比如下面的例子中,我們就寫了一個test case來測試一個Email驗證類EmailAddrValidator,這個類有一個doValidate(email)方法可以驗證email是否合法,如果不合法則會抛出ValidationException異常。是以我們寫了兩個方法來進行單元測試,前一個方法testDoValidate用來測試正常值,後一個方法testDoValidateException用來測試對錯誤的email格式是否能正确觸發異常。

import junit.framework.TestCase;

public class TestEmailAddrValidator extends TestCase {

    EmailAddrValidator validator = new EmailAddrValidator();

    public void testDoValidate() throws ValidationException {

        validator.doValidate("[email protected]", null);

        validator.doValidate("[email protected]", null);

        validator.doValidate("[email protected]", null);

        validator.doValidate("glchen.gang@163_tom.com", null);

    }

    public void testDoValidateException() {

        testDoValidateException("@b.c");

        testDoValidateException("[email protected]");

        testDoValidateException("a@b.");

        testDoValidateException("@.c");

        testDoValidateException("@...");

        testDoValidateException(" ");

        testDoValidateException(null);

    private void testDoValidateException(String email) {

        try {

            validator.doValidate(email, null);

            fail("末抛出異常");

        } catch (ValidationException e) {

            assertTrue(true);

        }

}

例程說明: 這個例子的關鍵是方法testDoValidateException(String email) 。

import java.util.Locale;

import com.hygensoft.common.configure.ConfigureObject;

public class EmailAddrValidator{

    protected static final String ERROR_CODE_INVALID_EMAIL_ADDR = "INVALID_EMAIL_ADDR";

    protected static final String ERROR_CODE_INVALID_INPUT = "INVALID_INPUT_OBJECT";

    public Object doValidate(Object input, Locale locale) throws ValidationException {

        if (!(input instanceof String)) {

            throw new ValidationException(ERROR_CODE_INVALID_INPUT, input);

        String inputStr = (String) input;

        int idx = inputStr.indexOf('@');

        if (idx == -1 || idx == 0) {

        int idx2 = inputStr.indexOf('.', idx);

        if (idx2 == -1 || idx2 == idx + 1) {

        if (inputStr.endsWith(".")) {

        return input;

    /* (non-Javadoc)

     * @see com.hygensoft.common.configure.Configurable#initialize(com.hygensoft.common.configure.ConfigureObject)

     */

    public void initialize(ConfigureObject conf) {}

繼續閱讀