国产凹凸在线-国产拗女一区二区三区-国产白白视-国产白领-国产白拍-国产白丝jk被疯狂输-国产白丝喷-国产白丝在线

金喜正规买球

可靠的功能測試--Espresso和Dagger2

轉(zhuǎn)帖|行業(yè)資訊|編輯:龔雪|2016-01-19 10:03:37.000|閱讀 599 次

概述:Dagger2已經(jīng)成為眾多Android開發(fā)者的必備工具, 是一個快速的依賴注入框架,由Square開發(fā),并針對Android做了特別優(yōu)化, 已經(jīng)被Google進行Fork開發(fā). 不像其他的依賴注入器, Dagger2沒有使用反射, 而是使用預(yù)生成代碼, 提高執(zhí)行速度。

# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

可靠的功能測試, 意味著在任何時候, 獲取的測試結(jié)果均相同, 這就需要模擬(Mock)數(shù)據(jù). 測試框架可以使用Android推薦的Espresso. 模擬數(shù)據(jù)可以使用Dagger2, 一種依賴注入框架。

單元測試通常會模擬所有依賴, 避免出現(xiàn)不可靠的情況, 而功能測試也可以這樣做. 一個經(jīng)典的例子是如何模擬穩(wěn)定的網(wǎng)絡(luò)數(shù)據(jù), 可以使用Dagger2處理這種情況。

Talk is cheap! 我來講解下如何實現(xiàn)。

Github

1. 配置依賴環(huán)境

  • Lambda表達(dá)式支持
  • Dagger2依賴注入框架
  • RxAndroid響應(yīng)式編程框架
  • Retrofit2網(wǎng)絡(luò)庫框架
  • Espresso測試框架
  • DataBinding數(shù)據(jù)綁定支持
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

// Lambda表達(dá)式
plugins {
    id "me.tatarka.retrolambda" version "3.2.4"
}

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt' // 注釋處理

final BUILD_TOOLS_VERSION = '23.0.1'

android {
    compileSdkVersion 23
    buildToolsVersion "${BUILD_TOOLS_VERSION}"

    defaultConfig {
        applicationId "clwang.chunyu.me.wcl_espresso_dagger_demo"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "clwang.chunyu.me.wcl_espresso_dagger_demo.runner.WeatherTestRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    // 注釋沖突
    packagingOptions {
        exclude 'META-INF/services/javax.annotation.processing.Processor'
    }

    // 使用Java1.8
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    // 數(shù)據(jù)綁定
    dataBinding {
        enabled = true
    }
}

final DAGGER_VERSION = '2.0.2'
final RETROFIT_VERSION = '2.0.0-beta2'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    // Warning:Conflict with dependency 'com.android.support:support-annotations'.
    // Resolved versions for app (23.1.1) and test app (23.0.1) differ.
    // See //g.co/androidstudio/app-test-app-conflict for details.
    compile "com.android.support:appcompat-v7:${BUILD_TOOLS_VERSION}" // 需要與BuildTools保持一致

    compile 'com.jakewharton:butterknife:7.0.1' // 標(biāo)注

    compile "com.google.dagger:dagger:${DAGGER_VERSION}" // dagger2
    compile "com.google.dagger:dagger-compiler:${DAGGER_VERSION}" // dagger2

    compile 'io.reactivex:rxandroid:1.1.0' // RxAndroid
    compile 'io.reactivex:rxjava:1.1.0' // 推薦同時加載RxJava

    compile "com.squareup.retrofit:retrofit:${RETROFIT_VERSION}" // Retrofit網(wǎng)絡(luò)處理
    compile "com.squareup.retrofit:adapter-rxjava:${RETROFIT_VERSION}" // Retrofit的rx解析庫
    compile "com.squareup.retrofit:converter-gson:${RETROFIT_VERSION}" // Retrofit的gson庫
    compile 'com.squareup.okhttp:logging-interceptor:2.6.0' // 攔截器

    // 測試的編譯
    androidTestCompile 'com.android.support.test:runner:0.4.1' // Android JUnit Runner
    androidTestCompile 'com.android.support.test:rules:0.4.1' // JUnit4 Rules
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1' // Espresso core

    provided 'javax.annotation:jsr250-api:1.0' // Java標(biāo)注
}

Lambda表達(dá)式支持, 優(yōu)雅整潔代碼的關(guān)鍵。

// Lambda表達(dá)式
plugins {
    id "me.tatarka.retrolambda" version "3.2.4"
}

android {
    // 使用Java1.8
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

Dagger2依賴注入框架, 實現(xiàn)依賴注入. android-apt使用生成代碼的插件。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

apply plugin: 'com.neenbedankt.android-apt' // 注釋處理

dependencies {
    compile "com.google.dagger:dagger:${DAGGER_VERSION}" // dagger2
    compile "com.google.dagger:dagger-compiler:${DAGGER_VERSION}" // dagger2
    provided 'javax.annotation:jsr250-api:1.0' // Java標(biāo)注
}

測試, 在默認(rèn)配置中添加Runner, 在依賴中添加espresso庫。

android{
    defaultConfig {
        testInstrumentationRunner "clwang.chunyu.me.wcl_espresso_dagger_demo.runner.WeatherTestRunner"
    }
}

dependencies {
    testCompile 'junit:junit:4.12'

    // 測試的編譯
    androidTestCompile 'com.android.support.test:runner:0.4.1' // Android JUnit Runner
    androidTestCompile 'com.android.support.test:rules:0.4.1' // JUnit4 Rules
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1' // Espresso core
}

數(shù)據(jù)綁定

android{
    // 數(shù)據(jù)綁定 
    dataBinding { 
        enabled = true 
    }
}

2. 設(shè)置項目

使用數(shù)據(jù)綁定, 實現(xiàn)了簡單的搜索天功能。

/**
 * 實現(xiàn)簡單的查詢天氣的功能.
 *
 * @author wangchenlong
 */
public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding mBinding; // 數(shù)據(jù)綁定
    private MenuItem mSearchItem; // 菜單項
    private Subscription mSubscription; // 訂閱

    @Inject WeatherApiClient mWeatherApiClient; // 天氣客戶端

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ((WeatherApplication) getApplication()).getAppComponent().inject(this);
        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    }


    @Override public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_activity_main, menu); // 加載目錄資源
        mSearchItem = menu.findItem(R.id.menu_action_search);
        tintSearchMenuItem();
        initSearchView();
        return true;
    }

    // 搜索項著色, 會覆蓋基礎(chǔ)顏色, 取交集.
    private void tintSearchMenuItem() {
        int color = ContextCompat.getColor(this, android.R.color.white); // 白色
        mSearchItem.getIcon().setColorFilter(color, PorterDuff.Mode.SRC_IN); // 交集
    }

    // 搜索項初始化
    private void initSearchView() {
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(mSearchItem);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override public boolean onQueryTextSubmit(String query) {
                MenuItemCompat.collapseActionView(mSearchItem);
                loadWeatherData(query); // 加載查詢數(shù)據(jù)
                return true;
            }

            @Override public boolean onQueryTextChange(String newText) {
                return false;
            }
        });
    }

    // 加載天氣數(shù)據(jù)
    private void loadWeatherData(String cityName) {
        mBinding.progress.setVisibility(View.VISIBLE);
        mSubscription = mWeatherApiClient
                .getWeatherForCity(cityName)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(this::bindData, this::bindDataError);
    }

    // 綁定天氣數(shù)據(jù)
    private void bindData(WeatherData weatherData) {
        mBinding.progress.setVisibility(View.INVISIBLE);
        mBinding.weatherLayout.setVisibility(View.VISIBLE);
        mBinding.setWeatherData(weatherData);
    }

    // 綁定數(shù)據(jù)失敗
    private void bindDataError(Throwable throwable) {
        mBinding.progress.setVisibility(View.INVISIBLE);
    }

    @Override
    protected void onDestroy() {
        if (mSubscription != null) {
            mSubscription.unsubscribe();
        }
        super.onDestroy();
    }
}

數(shù)據(jù)綁定實現(xiàn)數(shù)據(jù)和顯示分離, 解耦項目, 易于管理, 非常適合數(shù)據(jù)展示頁面。

在layout中設(shè)置數(shù)據(jù)。

    <data>
        <variable
            name="weatherData"
            type="clwang.chunyu.me.wcl_espresso_dagger_demo.data.WeatherData"/>
    </data>

在代碼中綁定數(shù)據(jù)。

mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
mBinding.setWeatherData(weatherData);

搜索框的設(shè)置。

    @Override public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_activity_main, menu); // 加載目錄資源
        mSearchItem = menu.findItem(R.id.menu_action_search);
        tintSearchMenuItem();
        initSearchView();
        return true;
    }

    // 搜索項著色, 會覆蓋基礎(chǔ)顏色, 取交集.
    private void tintSearchMenuItem() {
        int color = ContextCompat.getColor(this, android.R.color.white); // 白色
        mSearchItem.getIcon().setColorFilter(color, PorterDuff.Mode.SRC_IN); // 交集
    }

    // 搜索項初始化
    private void initSearchView() {
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(mSearchItem);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override public boolean onQueryTextSubmit(String query) {
                MenuItemCompat.collapseActionView(mSearchItem);
                loadWeatherData(query); // 加載查詢數(shù)據(jù)
                return true;
            }

            @Override public boolean onQueryTextChange(String newText) {
                return false;
            }
        });
    }

3. 功能測試

這一部分, 我會重點講解。

既然使用Dagger2, 那么我們就來配置依賴注入。

三部曲: Module -> Component -> Application

Module, 使用模擬Api類, MockWeatherApiClient

/**
 * 測試App的Module, 提供AppContext, WeatherApiClient的模擬數(shù)據(jù).
 * <p>
 * Created by wangchenlong on 16/1/16.
 */
@Module
public class TestAppModule {
    private final Context mContext;

    public TestAppModule(Context context) {
        mContext = context.getApplicationContext();
    }

    @AppScope
    @Provides
    public Context provideAppContext() {
        return mContext;
    }

    @Provides
    public WeatherApiClient provideWeatherApiClient() {
        return new MockWeatherApiClient();
    }
}

Component, 注入MainActivityTest

/**
 * 測試組件, 添加TestAppModule
 * <p>
 * Created by wangchenlong on 16/1/16.
 */
@AppScope
@Component(modules = TestAppModule.class)
public interface TestAppComponent extends AppComponent {
    void inject(MainActivityTest test);
}

Application, 繼承非測試的Application(WeatherApplication), 設(shè)置測試組件, 重寫獲取組件的方法(getAppComponent)

/**
 * 測試天氣應(yīng)用
 * <p>
 * Created by wangchenlong on 16/1/16.
 */
public class TestWeatherApplication extends WeatherApplication {
    private TestAppComponent mTestAppComponent;

    @Override public void onCreate() {
        super.onCreate();
        mTestAppComponent = DaggerTestAppComponent.builder()
                .testAppModule(new TestAppModule(this))
                .build();
    }

    // 組件
    @Override
    public TestAppComponent getAppComponent() {
        return mTestAppComponent;
    }
}

Mock數(shù)據(jù)類, 使用模擬數(shù)據(jù)創(chuàng)建Gson類, 延遲發(fā)送至監(jiān)聽接口。

/**
 * 模擬天氣Api客戶端
 */
public class MockWeatherApiClient implements WeatherApiClient {
    @Override public Observable<WeatherData> getWeatherForCity(String cityName) {
        // 獲得模擬數(shù)據(jù)
        WeatherData weatherData = new Gson().fromJson(TestData.MUNICH_WEATHER_DATA_JSON, WeatherData.class);
        return Observable.just(weatherData).delay(1, TimeUnit.SECONDS); // 延遲時間
    }
}

注冊Application至TestRunner。

/**
 * 更換Application, 設(shè)置TestRunner
 */
public class WeatherTestRunner extends AndroidJUnitRunner {
    @Override
    public Application newApplication(ClassLoader cl, String className, Context context) throws InstantiationException,
            IllegalAccessException, ClassNotFoundException {
        String testApplicationClassName = TestWeatherApplication.class.getCanonicalName();
        return super.newApplication(cl, testApplicationClassName, context);
    }
}

測試主類

/**
 * 測試的Activity
 * <p>
 * Created by wangchenlong on 16/1/16.
 */
@LargeTest
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {

    private static final String CITY_NAME = "Beijing"; // 因為我們使用測試接口, 設(shè)置任何都可以.

    @Rule public ActivityTestRule<MainActivity> activityTestRule = new ActivityTestRule<>(MainActivity.class);

    @Inject WeatherApiClient weatherApiClient;

    @Before
    public void setUp() {
        ((TestWeatherApplication) activityTestRule.getActivity().getApplication()).getAppComponent().inject(this);
    }

    @Test
    public void correctWeatherDataDisplayed() {
        WeatherData weatherData = weatherApiClient.getWeatherForCity(CITY_NAME).toBlocking().first();

        onView(withId(R.id.menu_action_search)).perform(click());
        onView(withId(android.support.v7.appcompat.R.id.search_src_text)).perform(replaceText(CITY_NAME));
        onView(withId(android.support.v7.appcompat.R.id.search_src_text)).perform(pressKey(KeyEvent.KEYCODE_ENTER));

        onView(withId(R.id.city_name)).check(matches(withText(weatherData.getCityName())));
        onView(withId(R.id.weather_date)).check(matches(withText(weatherData.getWeatherDate())));
        onView(withId(R.id.weather_state)).check(matches(withText(weatherData.getWeatherState())));
        onView(withId(R.id.weather_description)).check(matches(withText(weatherData.getWeatherDescription())));
        onView(withId(R.id.temperature)).check(matches(withText(weatherData.getTemperatureCelsius())));
        onView(withId(R.id.humidity)).check(matches(withText(weatherData.getHumidity())));
    }
}

ActivityTestRule設(shè)置MainActivity.class測試類。

setup設(shè)置依賴注入, 注入TestWeatherApplication的組件。

使用WeatherApiClient的數(shù)據(jù), 模擬類的功能. 由于數(shù)據(jù)是預(yù)設(shè)的, 不論有無網(wǎng)絡(luò), 都可以進行可靠的功能測試。

執(zhí)行測試, 右鍵點擊MainActivityTest, 使用Run ‘MainActivityTest’

原文轉(zhuǎn)載自:


標(biāo)簽:軟件測試技術(shù)軟件測試

本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn


為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產(chǎn)品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
亚洲精品高清欧美 | 成人午夜在线i免费观看 | 欧美日韩深夜视频在线观看 | 日韩高清亚洲日韩精品一 | 一区二区三区亚洲高清 | 国产激情自拍亚洲精品国产精品精 | 国产精品香蕉在线观看 | 欧美高清一区二区精品 | 日本天堂免费观看 | 亚洲精品视频一卡二卡三卡 | 在线亚洲日韩欧美一区二区 | 人人看人人拍国产精品 | 国产欧美综合系列在线 | 国产精品自在在线午夜免费 | 包子铺welcome仙踪林 | 亚洲国产综合精品中文字幕 | 国产最新在线一区二区 | 国产雏女破苞在线播放 | 国产免费三级a在线观看 | 国产目拍亚洲精品二区 | 亚洲国产精品欧美日韩一区二区 | 在线观看成人年视频免费 | 不卡一区二区在线观看 | 国产精品区在 | 午夜三级伦理片在线观看 | 国产在线精品福利91啪 | 91美女秘片黄在线观看游戏 | 欧美另类激情在线观看网站 | 日本免费一级手机看片一区二区 | 午夜片神马影院福利 | 亚洲国产精品隔壁老王 | 精品大片ww | 国产精品视频系列专区 | 丰满的继坶3中文在线观看 福利国产精品 | 日韩欧美一本书道一区二区 | 日本最新免费不卡二区在线 | 国产福利在线观看91精品性色 | 成人午夜看黄在线尤物成人 | 亚洲日韩aⅴ在线视频 | 91视频导航 | 亚洲欧美日韩综合在线丁香 | 日韩免费精品视频 | 自宅警备员ova动漫 亚洲成片在线观看12345 | 麻花豆传媒在线观看 | 国产又色又爽又黄刺激的影视 | 黑料不打烊最新2025地址 | 韩国三级hd中文字幕电影天堂 | 不止不休高清在线观看 | 午夜免费福利不 | 精品国产日韩亚洲一区 | 日本美女视频体验一二区 | 美国精品午夜剧场免费观看 | 中文字幕电影一区二区 | 国内在线不卡视频 | 国产精品亚洲玖玖玖在线观看 | 精品国产另类欧美精品 | 99亚洲国产综合一区二区 | 青青国产精品一区二区 | 国产一区二区三区噜噜 | 国产对白老熟女正在播放 | 自拍偷拍欧美图片 | 欧美日韩中文在线视频 | 一二区成 | 91精品国产自产高清在 | 日韩阿v高清视频在线观看 国产不卡高清 | 亚洲欧美日韩中文字幕二区 | 成人又黄又爽 | 日韩欧美一区二区三区免费观看 | 欧美日韩一区免费观看 | 日韩精品中文字幕第1页 | 国产日韩手 | 色一情一乱一交一二三区 | 国产精品香蕉一区二区三区 | 乱仑图片 | 精品国产香蕉在线播出 | 日韩亚色五月 | 国产乱码精品一区二区三区四川人 | 国产精品高清偷窥盗摄 | 国产综合精品一区二 | 国产精品亚洲欧美日韩性色 | 国产色片大全在线观看 | 欧美18岁×××喷水 | 成人动漫在线观看 | 国产在线欧美日韩精品一区 | 欧美精品在线一区二区三区 | 草莓视频污污 | 一区二区三区国产美女在线播放 | 日韩一中文字 | 国产绿帽绿奴一区二区 | 日韩午夜视 | 一区二区视频免费观看 | 资源视频在线观看 | 日韩欧美性爱精品一区二区 | 国产在线97免费观 | 国产精品揄拍100视频最近 | 妺妺窝人体色www聚色窝 | 国产a级三级三级三级视频 日本高清在线播放 | 伦理片国产精品 | 中文字幕精品视频在线 | 秒拍视频 | 亚洲成a人片在线观看一级 国产精品一卡2 | 漂亮的保姆6 | 日韩免费精品一区二区三区 | 国色天香中文在线观看www | aaaaa级少| 日韩精品一线二线三线 | 欧美亚洲日产综合新一区 | 国产精品码一区二区 | 动漫h片在线观看 | 国产高清在线精品二区一 | 日韩欧美中文字幕免费 | 老司机精 | 1卡2卡三卡4卡免费日韩乱码 | 99人精品福利在线观看 | 欧美精品视频一区二区三区 | 国产欧美综合系列在线 | 国产精品天天看 | 日韩女优在线观看 | 日本免费一区二区三区 | 亚洲日韩制服中文字幕 | 成人三级电 | 国产亚洲日韩网曝欧美精品 | 天堂中文最新版在线中文 | 日韩一二三区免费视频 | 一区二区视频免费观看 | 中文字幕亚洲无线码一区女同 | 国产精品亚洲欧美高清 | 国产福利一区二区三区四区 | 精品国产乱码一区二区三区 | 日韩不卡高清中文字幕 | 成人午夜免费在线观看 | 日产乱码一二三区别免费下 | 国产精品兄妹伦理片一区二区 | 亚洲精品一区二区三区四区五区 | 激情97综合亚洲 | 成年网站v片在线观看 | 国产香线蕉手机视频在线观看 | 中文字幕精品乱码亚洲一区 | 三级中文字幕永久在线视频 | 伦理电影网 | 亚洲中文字幕无 | 欧美囗交xx×bbb视频 | 国产精品福利电影一 | 欧美aa | www亚洲精品在线观看 | 国产精品拍综合在线 | 亚洲视频一区 | 欧美国产亚洲一区 | 午夜国产福利在线直播 | 国产女技师按摩在线观看 | 国产精品欧美日韩中字一区二区 | 人人狠狠综合99综合久 | 欧美喷潮极限另类视频 | 国产一区二区三区高清在线观看 | 欧美色大成网站www永久男 | 国产高清精品自在线看 | 日韩欧美在线综合va网 | 欧美日韩中文国产va另类电影 | 日本中文字幕熟女 | 日韩精品中文字幕在线观看 | 亚洲激精日韩激情欧美激 | 91导航小污女导航天天夜夜爽 | 88国产精品欧美一区二区三区 | 国产精品自产拍高 | 国产专区在线播放 | 国产中文在 | 亚色九九九全国免费视频 | 国内日韩视频在线一区 | 国产不卡视频在线播放 | 99视频精品全部 | 国产伊煮焦成品75 | 日韩一本之道一区中文字幕 | 韩国免费视频一区二区三区 | 国产主播在线一区二区 | 欧美亚洲人成网 | 国产综合视频在线观看8 | 综合精品欧美日韩国产在线 | 欧美综合专区 | 成人国内免费精品视频在线观看 | 成人动漫在线免费看 | 爱夜夜性夜夜夜夜夜夜爽 | 国产91免费精品电 | 久1精品视频 | 亚洲精品自拍愉拍第二页 | 国产精品观看 | 美腿丝袜在线播放 | 成人字幕网视频在线观看 | 国产精品小电影 | 国产理论片高清 | 精品国产aⅴ一区二区三区 国产a免 | 亚洲欧美日韩中文字幕在线不卡 | 婷婷四房综合激情五月在线 | 国产高清晰在线播放 | 国产精品亚洲免费在线 | 成人午夜看黄在线尤物成人 | 策驰影院 | 97色伦在色在线播放三级 | 欧美日韩亚洲国产一区二区三区 | 国产最新在线一区二区 | 国产精品日韩精品在线观看 | 国产天堂亚洲精品 | 国产亚洲情侣 | 亚洲专区国产精品欧美电影 | 五月天丁香婷深爱综合网 | 成人国产一区二区精品小说 | 91免费伊人 | 国产一区二区三区精彩视频 | 免费60分| 欧美人成网站观看www | 国产亚洲精品bt天堂 | 精品综合欧美在线观看 | 秋霞国产精品一区二区 | 毕业之后混得很normal | 亚洲日本道1区2区3区不卡 | 欧美线路| 区国产高清在线 | 亚洲1级在线观看 | 国产91精品一区二区亚洲 | 欧美日本日韩五月天 | 国产精品第一区亚洲精品 | 丝袜美腿中文字幕 | 中文字幕亚洲无限码 | 欧美日韩不卡高清在线看 | 国产ts人妖系列 | 欧美日韩视频免费播放 | 亚洲中文字幕30页 | 精品国产午夜理论片在线 | 欧美一级特 | 亚洲第一页在线视频 | 国产视频一区在线观看 | 热门电视剧免费在线观看 | 99久re热视频这里只有精品6 | 日韩女优影音先 | 日韩在线一区二区不卡视频 | 日本高清一二三不卡区 | 国产亚洲欧美日韩综合一 | 国产福利一区电影 | 欧美中文日韩亚洲 | 欧美激情综合一区二区三区 | 日本一二三高清 | 91美女片黄在线观看 | 国产精品自产拍在线观看花钱看 | 99精品视频国产一区二区三 | 18+在线观看网站 | 亚洲日韩 | 国产精品欧美一区 | 国产女m视 | 日韩一级簧片 | 日本护士喷| 国语自产偷拍精 | 区三区免费视频 | 中文字幕日韩专区下载 | 日本在线日本中文字幕 | 九热视频 | 国精产品一品二品国精品69x | 日韩欧美一区二区三在线播放 | 欧产日产国产精品 | 欧美日韩一区二区三区在线视频 | 欧美老妇多毛 | 国产zzjjzzjj视频 | 日本中文一二区有码在线 | 日韩欧美一区二区三区中文精品 | 午夜成人精 | 欧美综合精品一区二区三 | 免费高清乱伦欧美 | 精品91自产拍 | 亚洲+国产+激情 | 国产盗摄视频在线 | 日韩视频无明精品 | 精品国产自产拍在线观看蜜桃 | 国产素人视频在线播放 | 一级国产片一 | 青青青国产在线观看 | 韩国非常大度的电影原声 | 国产福利小视频在线免费观看 | 国内性色精品视频 | 日韩阿v高清视频在线观看 国产不卡高清 | 欧美私人情侣网站 | 极品美女一区二 | 国产日韩欧美新地址 | 国产.欧美一区二区三区 | 岛国岛国免费ⅴ片 | 精品在线一区二区三区 | 成人污污污w | 91免费精品国偷自产在线在线 | 国产精品欧美一区二区三区不卡 | 欧美+日本+亚洲 | 熟女一区二区 | 国产又粗又长又黄又猛又爽视 | 肥女巨肥巨大黑毛 | 欧美xx| 91豆奶视频| 日本激情夜里视频在线观看 | 精品午夜在 | 日本在线综合一区二区三区 | 国产小视频在线观看www | 国产精品大战 | 欧美伦费免费全部午夜最新 | 91精品国产高清一区二 | 免费亚洲人a成影院 | 91人成网站色www免费 | 欧美亚洲日本国产黑白配 污污网站在线观看免费 | 国产免费又刺激 | 最新电影 | 中文乱伦综合高清 | 国产午夜在线观看免费 | 精品一线二线三线区别在哪欧美 | 国产天堂在线丝袜一区 | 一区二区三区高清视频一 | 免费特级欧美片 | 国产女主播| 97色伦| 亚洲一区二区三 | 在线观看精品亚洲 | 国产亚洲欧美亚综合在线区 | 国产人成视频免费看 | 中文字幕亚洲欧美在线不卡 | 欧美精品午夜 | 精品国产蜜桃臀在线观看 | 高清免费国产传媒海量视频 | 国产午夜福利片在线观看一区 | 757国产午夜福利在线播放 | 亚洲精品分类在看在 | 亚洲欧美另类在线一区 | 亚洲久悠悠色悠在线 | 国产婷婷一区二区三区 | 国产剧情中文字幕一区二区 | 国产精品视频第二区第二页 | 日本人视频国产一区二区三区 | 国产专区欧美专区在线观看 | 国产精品一区二区三区大 | 国产vr精品亚洲欧美咪咕爱 | 成人大黄全免费网站 | 亚欧人成 | 女女同性女同一区二区三区 | 国语自产精品视频熟女 | 欧美亚洲国产日本黑白 | 亚洲品质在线观看一区二区 | 国产亚洲日韩欧 | 精品国产电影在线看免 | 亚洲国产日韩在线播放 | 亚洲欧洲另类春色校园小说 | 国产黄在线观看免费观看不卡 | 日韩欧美国产传媒第一区二区 | 精品精品国产高清 | 国产盗摄一区二区三区 | 国产91免费精品电影 | 欧美经典 | 最新国产乱视频伦在线 | 91九色老熟女免费 | 老汉色影院首页 | 91福利国产在线在线播放 | 国产精品办公室沙发 | 国产妇人成 | 精品国产综合区久 | 精品视频 | 精品视频vs精品视频 | 免费观看国产精品视频vv | 717影视午夜理论片大全福利 | 国产人妖自拍 | 精品免费视在线观看 | 欧美午夜视频一区二区三区 | 午夜男女爽爽爽免费播放 | 91精品国产高清一区二 | 欧美性受一区二区三区 | 一区二区三区国产精华护肤品 | 国产日韩欧美视频在线观看 | 成人经典视频 | 欧美日韩亚洲一区 | 中文字字幕在线精品乱码高清 | 成人午夜免费观看 | 国产精品白拍三级 | 九九热线精品视频在线观看 | 亚洲高清在线 | 韩国三级在线不 | 国产日韩欧美一区二区三 | 99久免费精品视频在线观78 | 日本女优一区二区三区四区 | 欧美日韩国产综合草草 | 夜色国产精品欧美在线观看 | 中文字幕在线一 | 国产亚洲日韩欧美一区二区三区 | 日韩a人| 黄三级在线观看 | 国产在线精选免费视频含羞草 | 99热在线只有精品 | 免费人成视频在线看片下载 | 夭天干天天 | 欧美日韩一区视频导航 | 韩国日本一区二区 | 国产福利尤物 | 真实国产乱子伦对白在线 | 女人一区二区视频免费 | 亚洲永久精品 | 亚洲综合欧美在线 | 好吊色在线观 | 欧美性受xxxx黑人猛交 | 国产精鲁鲁网在线视频 | 99热这里只有 | 成年免费国产大片 | 欧美综合乱码一区二区三区 | 日韩在线电影大全免费观看 | 92午夜福利手 | 国产综合在线观看自拍 | 91午夜看片 | 亚洲欧美日韩、中文 | 99在线这精品视频 | 日本欧美韩国国产综合另类 | 老子午夜伦理不卡一级电影 | 成人人电影 | 国产高清亚洲美女精品图片91 | 国产太嫩了在 | 精品国产电影自在免费观看 | 精品女同同性视频在线网 | h版电影在线播放视频网址 国产在线观看成永久视频 精品视频在线播放一区二区三区 | 在线观看国产 | 国产视频三区 | 欧美视频精品一区二区 | 国产在线精选视频免费 | 午夜福利国产主播露出 | 日韩专区在线观 | 九九热爱视频精品视频 | 日本韩国三级 | 麻婆豆传媒一区二区三区 | 91精品夜夜夜一区二区 | 国产a级三级三级三级 | 97在线中文字幕观看视频 | 91污在线观 | www.污污污在线观看 | 在线观看午夜福利院视频 | 国产国语一级 | 欧洲日韩精品在线播放 | 日本一区二区三区视频免费看 | 欧美最猛性xxxxx直播 | 91极品尤物在线观看 | 亚洲欧洲电影一 | 日本高清中 | 国产日韩欧美911在线观看 | 国产男女猛烈 | 国产精品第一页 | 日韩精品免费网站 | 国产素人视频在线播放 | 国产精品全网免费在线播放 | 91视频免费观看 | 亚洲精品亚洲人 | 99re6在线观看国产 | 风韵丰满| 成人看片黄在线观看 | 区三区国产高清视频 | 欧美视频人人干人人 | 亚洲高清aⅴ日本欧美视频 亚洲色一色噜一噜噜噜人与 | 最新日韩午夜一区二区 | 国产精品欧美亚洲韩国日本 | 欧美综合自拍亚洲综合区 | 精品蜜桃秘?一区二区三区 日本湿姝在线观看 | www.三级在线| 日韩a∨精品一区二区三区 国产欧美亚洲一区二区三区四区 | 欧美日女人b视频网 | 亚洲人人夜夜 | 永久在线观看 | 99re6国产精品视频播放 | 三级全黄的视频在线 | 传媒视频免费在线 | 巨胸喷奶水视频www 男女一进一出超猛烈的视频 | 亚洲日韩一区 | 国产精品一区二区国产主播 | 国产亚洲精品拍拍拍拍拍 | 国产办公室沙发系列 | 国产95视频精品免费 | 日韩成人激情综合网 | 日本精品αv中文字幕 | 红杏亚洲影院一区二区三区 | 老司机亚洲精品影院 | 中文字幕日韩一区 | 91午夜视频 | 国产va免费高清在线观看 | 日本免费不卡高清网站视频 | 99sss高清在线视频网 | 亚洲日本va午夜在线电影 | 丝袜视频国产手机在线 | 无人在线视频高清免费观看 | 国产精品jizz | 日本aaa视频 | 国产综合精品一区二 | 777精品成人影院 | 亚洲91视频 | 国产拍拍拍精品视频 | 欧美激情欧美狂野欧美精品免费 | 国产丝袜视频 | 欧美激情性猛交 | 国产亚洲一区二在 | 亚洲精品成人自拍视频 | 国产伦理一区 | 日本韩国三级aⅴ在线观看 欧美a级片视频 | 日韩在线a视频免费播放 | 国产精品亚洲一区二区三区欲 | 色一情一乱一交一二三区 | 99日韩a及免费视频 日产国产精品日韩精品 | 亚洲色大成网站www永久男同 | 欧美大黑帍在线播 | 日韩精品亚洲aⅴ在线影院 欧美性受xxxx狂喷水 | 99亚洲直播在 | 国产精品第二页在线撒放 | 制服丝袜中文字 | 成人欧美激情亚洲日韩蜜臀 | 国产精品人成视频免费播放 | 九九综合黑白配久 | 亚洲免费观看视频 | 九九热视频免费在线观看 | 国产乱理伦片在线观看夜 | 欧美亚洲国产清纯综合图区 | 亚洲高清中文字幕综合网 | 国产aaa一区二区三区 | 麻花传媒剧国产mv高清播放 | 欧美国产日韩极速在线 | 九九热线精品视频在线观看 | 911中文字幕免费高清观看 | 一本大道综合伊人精品热热 | 日韩精品在线第二页 | 欧美影院一区二区三区 | 国产伦精品一区二区三区免 | 成人午夜看片在线观看 | 激情视频小说在 | 亚洲午夜福利在线视频 | 日本高清视频www夜色资源 | 日本性爱视频免费看 | 日韩、欧美、中文三级 | 国产精品三区短视频 | 国产亚洲欧洲精品一区二区三区 | 国产精品1024永久免费视频 | 欧美αv| 国产ts系列紫苑视频在线观看 | 国偷盗摄自产福利一区在线 | 办公室第1季9集在线观看 | 羞羞影院午夜男女爽爽影 | 精品日韩成人欧美 | 日韩一卡二卡3卡四卡网站 精品福利一区二区三区免费视 | 亚洲欧美日韩中文二区 | 成人日韩熟女高清视频一区 | 99视频有精品视频在线观看 | 欧美顶级情欲片免费看 | 中文字幕亚洲一区二区三区 | 亚洲国产精品91 | 国内三级自拍小视频在线观看 | 国产一在线精品一 | 精品一区二区免费视频 | 高清有码国产一区二区 | 国产中文字幕精品视频 | 日本在线tv黄 | 91天仙tv国产福利精品 | 亚洲欧美另类在线图片区 | 国产主播福利片在线观看 | 亚洲国产v高清在线观看 | 国产尤物极品在线视频播放 | 国产一区二区三区丝袜精品 | 国产娱乐凹凸视觉盛宴在线视频 | 99热国产在线播放只有精品 | 欧美阿v高 | 果冻传媒视频在线 | 国产精品进线69影院在线 | 女女同性女同一区二区三区 | 国产免费资源 | 91精品国产欧美一区二区 | 成人免费观看黄ā大片夜月 | 亚洲永久精品 | 日韩精品综合丝袜制服 | 国产欧美日韩综合一区 | 欧美国产另 | 久播伦理影院影视大全 | 日本aa大片在线播放免费看 | 国产丶欧美丶 | 一个人看的免费高清www视频 | 99精品国产兔费观看66 | 精品免费| 国产亚洲视频中文字幕97精品 | 国产啪精品视频网站丝袜 | 动画片大全大人动漫在线观看 | 日韩一区二区免费看 | 欧美变态一区二区 | 国内外精品一区二区三区在线观看 | 3d藏机 | 欧美精品在| 国产区日韩区欧美区 | 从后面进入嗯啊视频 | 国产91精品一区二区亚洲 | 观看免费 | 日本成a人片在线播放 | 喷水的视频一区二区三区 | 野花日本大全免费 | 中文日产幕无线码系列 | 国产口爆 | 欧美亚洲精品第一 | 9cao在线播放精品日韩 | 欧美一级日韩一级 | 国产中文欧美日韩在线 | 亚洲第一网站a√在线观看 日韩亚洲产 | 韩国美女直播福利一区二区 | 欧洲无线码免费一区 | 国产目拍亚洲精品二区 | 免费高清手机在线观看 | 精品在线一区二区三区 | h视频在线观看免费完整版 在线亚洲日韩欧美一区二区 | 免费视频在线观看cc | 国产区免| 日本视频一区在线播放 | 国产对白嫖老妇搡老太 | 日本中文字幕专区视频在线 | 无线网在线观看 | 日本中文字幕在线观看 | 人成视频在线观看国产 | 在线观看视频一区精 | 国产又大又黑又粗免费视频 | 日本成a人片在线观看影院 国产欧美日韩一区二区三区 | 日本一区二区三区高清视频在线 | 国产高清视频在线观 | 欧美日韩国产一区二区三区欧 | 亚洲欧美国产高清va在线播放 | 不卡国产精品欧 | 精品国产一区二区三区四区vr | 欧美激情在线免费观看 | 日本免费一区二区三区最新vr | 国产精品免费一区二区三区视频 | 日韩欧美亚洲一区二区三区四 | 国产一级免费在线观看 | 在线视频下载 | 欧美日韩免费不卡在线观看 | 国产亚洲欧美日韩综合一 | 国产视频精品分类 | 日本欧美一区二区三区片 | 欧美35页视频在线观看 | 人人澡欧美一区 | 亚洲无限 | 国产福利自产拍在线观看 | 吃旅行者的坤巴 | 三级网站视频 | 女女在线观看舒服 | 日本一本二本三区免费免费高清 | 美女视频黄 | 欧美一欧美一区二三区性 | 精品国产日韩一区二区三区 | 日韩va| 大伊香蕉精品视频在线观看 | 亚洲日本欧美综合在线一 | 欧美顶级情欲片免费看 | 1区2区日韩欧美国产 | 国产精品艾草在线观看 | 国产不卡一区二区三区免费视 | 国产啪视频1000 | 欧美999一区 | 国产乱子经典视频在线 | 一欧美视频 | 国产精品视频分类 | 亚洲综合一区三区 | 精品国产自在精品国产精 | 日韩一二三区视频精品 | 免费看黄的网址 | 国产精品宾馆精品酒店 | 最快无弹窗小说阅读网 | 天美传媒果冻传媒国产日本 | 片一级二级 | 男人都懂www深夜免费网站 | 亚洲a视频在线欧美国产 | 精品亚洲欧美v国产一区二区三区 | 亚洲人成网站免费播放 | 日本伊人色综合网 | 国产精品福利尤物youwu | 小说区图片区 | 高清欧美性xxxx成熟 | 被特种兵开宫灌满怀孕h | 精品国产免费污污网站免费 | 日韩欧美精品一区二区在 | 日本有码在线中文字幕 | 国产精品一二三区视频网站 | 国产日韩精品一区二区三 | 亚洲综合区夜久 | 欧美激情一区二区三区在线 | 秋霞网国产| 中文字幕在线观看不卡 | 日本老妇人| а√在线官网 | 欧美一区日韩国产 | 欧美三级韩国三级日本三斤 | 欧美在线观看h片 | 成年人24小时在线免费观看视频 | 免费观看交性大片 | 91老司机精品福利在线 | 精品国产免费一区二区三区 | 日韩精品中文字幕在线 | 三区免费高清视 | 国产日b视频在线观看 | 国产伦精品生活一区二区三区 | 观看直播更便捷 | 国内在线不卡视频 | 国产乱码亚洲日韩欧美乱码 | 国产午夜电影在线电影 | 色国产视频 | 国产九区 | 国产免费直播在线观看视频 | 成全在线观看免费完整 | 最新一区二区三区免费看 | 日本淫秽视频在线 | 国产在线精品成人一区二区三区 | 国产精品一 | 老司机在线 | 国产欧美日韩va另类影音先锋 | 国产玉足脚交极品在线 | 免费人成| 日韩一区二区三区免费高清 | 精品中文 | 国产永久在线 | 欧美性狂猛xx | 精品国产一区二区三区香 | 第一国产综合高清 | 青苹果乐园影院在线播放 | 欧美日韩不卡视频一区二区三区 | 欧洲在线观看一区二 | 激情视频小说在 | 91福利国产在线在线播放 | 国产在线视精品在亚洲 | 亚洲精品亚洲欧美综合区 | 果冻传媒国产电影免费看 | 国产精品网红尤物福利在线观看 | 精品人伦一区二区三区 | 日韩欧美一二三区 | 色天天综合色天天天天看大 | 精品区2区| 欧美巨大黑人暴力xxxxx黑人 | 亚洲一区激情校园小说 | 精品国产一区二区三区2025 | 91精品丝袜网站 | 日韩欧美视频一二区 | 大香伊蕉在一本线影院 | 91精品国产色综 | 日本免费精品 | 在线观看视频欧美 | 国产精品高清一区二区三区不卡 | 国产精品日韩欧美一区二区 | 成人免费看www网址入口 | 日韩亚洲一区二 | 一级特黄性色生活片一区二区 | 91视频91最新 | 秋霞伦理手机在线看片 | 国产日产欧美一区二区 | 国产熟女乱伦一区二区 | 国产揄拍精品揄拍对白 | 精品一区二区三区影院在线午 | 成年女人黄小视频 | 成人午夜福利短视频在线观 | 国产精品2025在线 | 午夜影院在线观看免费 | 亚洲国产欧美日韩v一区二区 | 天堂在线视频网站 | 一本a道v久遛 | 大伊香蕉精品一区视频在线 | 欧美精品一区二区三区免费观看 | 另类国产亚洲日韩 | 精品国产91乱码一 | 国产在线激情小视频青青 | 国产亚洲欧美一区二区 | 久艹国产精品久艹视频 | 日韩中文字幕乱伦 | 国产精品高清在线一区二区三区 | 私人家庭影院 | 欧美日韩大码中文区二区三区 | 精品91自产拍在线观看一区 | 国产高清在线丝袜精品一区 | 成人欧美s视频在线观看 | 激情欧美日韩一区二区 | 国产小说 | 人人澡人摸人人添 | 日本在线不卡二区三区 | 精品国产日韩无影视 | 欧美视频一区在线 | 国产欧美日韩一区二区三区视频 | 欧美日韩在线免费播放一二三区 | 国产又黄又爽又硬视频区一 | 日韩一级a毛大片在线视频丶 | 国产三区四区五 | 变态另类清纯唯美中文 | 国产一级视频在线观看 | 亚洲图片国产日韩欧美 | 日本五月天婷久 | 欧美中文高清日韩 | 国内精品视频九九九九 | 国产一级午夜福利免费区 | 不卡高清 | 国内精品视频免费观看 | 国产日韩欧美在线精品电影 | 爱视频在线观看 | 亚洲欧美中日韩中文字幕 | 亚洲人成在线不卡网 | 欧美在钱一级va免费观看 | 青春草在线视频免费观看 | 国产色婷 | 亚洲国产区中文在线观看不卡 | 又硬又粗又大一区二区三区视频 | 国产成年女人特黄特色大片免 | 欧美日韩国产一区二 | 日本高清无卡码 |