<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sky's blog

    我和我追逐的夢

    常用鏈接

    統(tǒng)計

    其他鏈接

    友情鏈接

    最新評論

    easymock教程-單元測試中的主要測試對象和依賴

         在單元測試中,通常我們都會有一個明確的測試對象,我們測試的主要目的就是為了驗證這個類的工作如我們預(yù)期。

         以下面的簡單代碼為例:


     

            public interface UserService {
                User query(String userId);
            }


            
    public class UserServiceImpl implements UserService {
                
    private UserDao userDao; 
                
    public User query(String userId) {
                    
    return userDao.getById(userId);
                }

                
                
    public void setUserDao(UserDao userDao) {
                    
    this.userDao = userDao;
                }

            }


            
    public interface UserDao {
                User getById(String userId);
            }


            
    public class UserDaoImpl implements UserDao {

                
    private Datasource dataSource;

                
    public User getById(String id) {
                    User user 
    = new User();
                    
    //execute database query
                    user.set..
                    
    return user;
                }


                
    public void setDatasource(Datasource datasource) {
                    
    this.datasource = datasource;
                }

                
            }



        這里我們定義有兩個interface: UserService 和 UserDao, 并給出了兩個實現(xiàn)類UserServiceImpl 和 UserDaoImpl。 其中UserServiceImpl依賴到UserDao,通過setter方法可以注入一個UserDao實現(xiàn)。而UserDaoImpl的實現(xiàn)則依賴到Datasource。

          然后我們來為實現(xiàn)類UserServiceImpl 和 UserDaoImpl編寫單元測試:

     1. UserServiceImplTest

    public class UserServiceImplTest {

        @Test
        
    public void testQuery() {
            User expectedUser 
    = new User();
            expectedUser.setId(
    "1001");
            expectedUser.setAge(
    30);
            expectedUser.setName(
    "user-1001");
            UserDao userDao  
    = EasyMock.createMock(UserDao.class);
            EasyMock.expect(userDao.getById(
    "1001")).andReturn(expectedUser);
            EasyMock.replay(userDao);

            UserServiceImpl  service 
    = new UserServiceImpl();
            service.setUserDao(userDao);
            User user 
    = service.query("1001");
            assertNotNull(user);
            assertEquals(
    "1001", user.getId()); 
            assertEquals(
    30, user.getAge()); 
            assertEquals(
    "user-1001", user.getName()); 

            EasyMock.verify(userDao);
        }

    }

     

        在這個測試類中,主要測試對象就是UserServiceImpl,對于UserServiceImpl的依賴UserDao,我們采取mock這個UserDao來滿足UserServiceImpl的測試需要。

     2. UserDaoImplTest

         代碼示例就不詳細(xì)寫了,和上面的類似,主要測試對象就是UserDaoImpl, 我們將通過mock Datasource來滿足UserDaoImpl對datasource的測試需要。

         可以從上面的例子中簡單的看出,通常單元測試都遵循這樣的慣例: AClass的單元測試類命名為AclassTest,主要職責(zé)是測試AClass的行為,理所當(dāng)然的主要測試對象就是AClass。而所有被AClass的依賴則自然而然的成為次要測試對象,通常我們都不關(guān)注這些依賴的內(nèi)部實現(xiàn),也不會要求在AClass的單元測試案例中對這些依賴的實現(xiàn)進(jìn)行測試和驗證。

         這也符合單元測試的理念: 我們將類AClass定義為單元,測試這個單元的行為是否如預(yù)期。同時也符合UserServiceImpl的實現(xiàn)邏輯:UserServiceImpl依賴到UserDao接口,并不直接依賴到UserDaoImpl,因此在UserServiceImpl的單元測試中,也不應(yīng)該引入UserDaoImpl這樣的真實類,mock框架在這個時候是最適合出場表演的了:我們可以通過mock UserDao來模擬出UserDao的各種行為以便檢測UserServiceImpl在這些行為下的處理是否正確: 不同的返回值,錯誤場景,異常場景。這也是mock框架在單元測試中被廣泛使用的原因:還有什么比mock 類更能方便的做到這些?

    posted on 2010-10-14 14:01 sky ao 閱讀(1732) 評論(0)  編輯  收藏 所屬分類: software test

    主站蜘蛛池模板: 亚洲一日韩欧美中文字幕在线| 亚洲精品制服丝袜四区| 亚洲激情校园春色| 国产无遮挡裸体免费视频在线观看| 亚洲日韩在线第一页| eeuss影院免费直达入口| 亚洲性日韩精品一区二区三区| 免费在线人人电影网| 亚洲美日韩Av中文字幕无码久久久妻妇 | 又长又大又粗又硬3p免费视频| 免费一级毛片正在播放| 久青草国产免费观看| 国产专区一va亚洲v天堂| 国产精品网站在线观看免费传媒| 亚洲AV综合色区无码一区爱AV| 日韩午夜理论免费TV影院| 亚洲制服丝袜精品久久| 免费看片A级毛片免费看| 美女又黄又免费的视频| 亚洲精品制服丝袜四区| 无码国产精品一区二区免费虚拟VR| 亚洲综合丁香婷婷六月香| 日本一道本高清免费| 国产精品福利片免费看| 久久国产亚洲精品无码| 免费看国产精品3a黄的视频| 国产精品亚洲а∨天堂2021| 精品国产_亚洲人成在线高清| 最近免费中文字幕大全免费| 亚洲精品无码国产片| 亚洲愉拍99热成人精品热久久 | 222www免费视频| 亚洲heyzo专区无码综合| 亚洲午夜无码AV毛片久久| 99久久精品免费视频| 亚洲国产成人精品无码区花野真一 | 91亚洲va在线天线va天堂va国产| 成人影片麻豆国产影片免费观看 | www亚洲一级视频com| 无码人妻久久一区二区三区免费 | 国产精品福利在线观看免费不卡 |