很多時候,我們要寫一些單元測試來測試我們程序是否能正確觸發(fā)異常。
比如下面的例子中,我們寫了一個test case來測試一個Email驗證類EmailAddrValidator,這個類有一個doValidate(email)方法可以驗證email是否合法,如果不合法則會拋出ValidationException異常。因此我們寫了兩個方法來進行單元測試,前一個方法testDoValidate用來測試正常值,后一個方法testDoValidateException用來測試對錯誤的email格式是否能正確觸發(fā)異常。
這個例子的關(guān)鍵是方法testDoValidateException(String email) 。
import junit.framework.TestCase;
public class TestEmailAddrValidator extends TestCase {
EmailAddrValidator validator = new EmailAddrValidator();
private void testDoValidateException(String email) {
try {
validator.doValidate(email, null);
fail("末拋出異常");
} catch (ValidationException e) {
assertTrue(true);
}
}
}
-----------------------------------------
注:在這里L(fēng)ocale 參數(shù)并沒有用到。
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) {
throw new ValidationException(ERROR_CODE_INVALID_INPUT, input);
}
int idx2 = inputStr.indexOf('.', idx);
if (idx2 == -1 || idx2 == idx + 1) {
throw new ValidationException(ERROR_CODE_INVALID_INPUT, input);
}
if (inputStr.endsWith(".")) {
throw new ValidationException(ERROR_CODE_INVALID_INPUT, input);
}
return input;
}
/* (non-Javadoc)
* @see com.hygensoft.common.configure.Configurable#initialize(com.hygensoft.common.configure.ConfigureObject)
*/
public void initialize(ConfigureObject conf) {}
}