字號: 小 中 大 |
推薦給好友
上一篇 |
下一篇
軟件單元測試的測試用例編寫方法
發布: 2010-9-10 08:28 |
作者: 網絡轉載 |
來源:
領測軟件測試網采編 |
查看: 298次 | 進入軟件測試論壇討論
領測軟件測試網
三、如何為每個測試方法單獨提供環境方法呢?
通過前面的講解,相信大家對模板方法和回調函數模式都已經掌握了,這里直接給出相關代碼:
/**
* DAL層測試支持類.
*
*
* 除非特殊情況,所有DAO都要繼承此類.
*
* @author tao.youzt
*/
public abstract class GodzillaDalTestSupport extends AbstractDependencyInjectionSpringContextTests {
/*
* @see org.springframework.test.AbstractDependencyInjectionSpringContextTests#getConfigLocations()
*/
@Override
protected final String[] getConfigLocations() {
String[] configLocations = null;
String[] customConfigLocations = getCustomConfigLocations();
if (customConfigLocations != null && customConfigLocations.length > 0) {
configLocations = new String[customConfigLocations.length + 2];
configLocations[0] = "classpath:godzilla/dal/godzilla-db-test.xml";
configLocations[1] = "classpath:godzilla/dal/godzilla-dao.xml";
for (int i = 2; i < configLocations.length; i++) {
configLocations[i] = customConfigLocations[i - 2];
}
return configLocations;
} else {
return new String[] { "classpath:godzilla/dal/godzilla-db-test.xml",
"classpath:godzilla/dal/godzilla-dao.xml" };
}
}
/**
* 子類可以覆蓋該方法加載個性化配置.
*
* @return
*/
protected String[] getCustomConfigLocations() {
return null;
}
/**
* 準備測試環境.
*/
protected void setupEnv() {
}
/**
* 清除測試數據.
*/
protected void cleanEvn() {
}
/**
* 測試用例執行器.
*/
protected abstract class TestExecutor {
/**
* 準備測試環境
*/
public void setupEnv() {
}
/**
* 執行測試用例.
*/
public abstract void execute();
/**
* 清除測試數據.
*/
public void cleanEnv() {
}
}
/**
* 執行一個測試用例.
*
* @param executor
*/
protected final void execute(final TestExecutor executor) {
execute(IgnoralType.NONE, executor);
}
/**
* 執行一個測試用例.
*
* @param executor
*/
protected final void execute(final IgnoralType ignoral, final TestExecutor executor) {
switch (ignoral) {
case NONE: {
setupEnv();
executor.setupEnv();
executor.execute();
executor.cleanEnv();
cleanEvn();
break;
}
case BOTH: {
executor.execute();
break;
}
case GLOBAL: {
executor.setupEnv();
executor.execute();
executor.cleanEnv();
break;
}
case LOCAL: {
setupEnv();
executor.execute();
cleanEvn();
break;
}
case GLOBAL_S: {
executor.setupEnv();
executor.execute();
executor.cleanEnv();
cleanEvn();
break;
}
case GLOBAL_C: {
setupEnv();
executor.setupEnv();
executor.execute();
executor.cleanEnv();
break;
}
case LOCAL_S: {
setupEnv();
executor.execute();
executor.cleanEnv();
cleanEvn();
break;
}
case LOCAL_C: {
setupEnv();
executor.setupEnv();
executor.execute();
cleanEvn();
break;
}
case BOTH_SETUP: {
executor.execute();
executor.cleanEnv();
cleanEvn();
break;
}
case BOTH_CLEAN: {
setupEnv();
executor.setupEnv();
executor.execute();
break;
}
case GLOBAL_S_LOCAL_C: {
executor.setupEnv();
executor.execute();
cleanEvn();
break;
}
case GLOBAL_C_LOCAL_S: {
setupEnv();
executor.execute();
executor.cleanEnv();
break;
}
}
}
/**
* 忽略類型Enum.
*/
public enum IgnoralType {
/** 不忽略任何環境相關方法 */
NONE,
/** 忽略全局環境相關方法 */
GLOBAL,
/** 忽略局部環境相關方法 */
LOCAL,
/** 忽略所有環境相關方法 */
BOTH,
/** 忽略全局準備測試環境方法 */
GLOBAL_S,
/** 忽略全局清除測試數據方法 */
GLOBAL_C,
/** 忽略局部準備測試環境方法 */
LOCAL_S,
/** 忽略局部清除測試數據方法 */
LOCAL_C,
/** 忽略全部準備測試環境方法 */
BOTH_SETUP,
/** 忽略全部清楚測試數據方法 */
BOTH_CLEAN,
/** 忽略全局準備測試環境和局部清除測試數據方法 */
GLOBAL_S_LOCAL_C,
/** 忽略全局清除測試數據和局部準備測試環境方法 */
GLOBAL_C_LOCAL_S
}
}
/**
* URL DAO測試類.
*
* @author tao.youzt
*/
public class TestBizUrlDAO extends GodzillaDalTestSupport {
private BizUrlDAO bizUrlDAO;
@Override
protected void setupEnv() {
bizUrlDAO.delete("www.easyjf.com");
}
@Override
protected void cleanEvn() {
bizUrlDAO.delete("www.easyjf.com");
}
/**
* 測試插入一條新數據.
*/
public void testInsert() {
execute(new TestExecutor() {
@Override
public void execute() {
bizUrlDAO.insert(generateDO());
assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
}
});
}
/**
* 測試重復插入數據的情況.
*/
public void testDuplicateInsert() {
execute(new TestExecutor() {
@Override
public void setupEnv() {
bizUrlDAO.insert(generateDO());
}
@Override
public void execute() {
try {
bizUrlDAO.insert(generateDO());
assertTrue("Must throw an exception!", false);
} catch (Exception e) {
assertTrue("Expect this exception.", true);
}
}
});
}
/**
* 測試刪除一條已經存在的數據.
*/
public void testDelete() {
execute(IgnoralType.GLOBAL_C, new TestExecutor() {
@Override
public void execute() {
assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
bizUrlDAO.delete("www.easyjf.com");
assertNull(bizUrlDAO.getByUrl("www.easyjf.com"));
}
@Override
public void setupEnv() {
bizUrlDAO.insert(generateDO());
}
});
}
/**
* 生成一個用于測試的DO.
*
* @return
*/
private BizUrlSynchronizeDO generateDO() {
BizUrlDO bizUrlDO = new BizUrlDO();
bizUrlDO.setUrl("www.easyjf.com");
bizUrlDO.setName("EasyJWeb");
bizUrlDO.setEmail("webmaster@easyjf.com");
return bizUrlDO;
}
public void setBizUrlDAO(BizUrlSynchronzieDAO bizUrlDAO) {
this.bizUrlDAO = bizUrlDAO;
}
}
注意testDeleate()方法,我們傳入了兩個參數,第一個參數IgnoralType.GLOBAL_C 代表忽略哪個方法,有12種類型可以設置。GLOBAL_C代表忽略全局的清除測試數據方法,其他見代碼注釋。
文章來源于領測軟件測試網 http://www.kjueaiud.com/