欧美日韩亚-欧美日韩亚州在线-欧美日韩亚洲-欧美日韩亚洲第一区-欧美日韩亚洲二区在线-欧美日韩亚洲高清精品

金喜正规买球

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

轉帖|行業資訊|編輯:龔雪|2016-01-19 10:03:37.000|閱讀 599 次

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

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

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

單元測試通常會模擬所有依賴, 避免出現不可靠的情況, 而功能測試也可以這樣做. 一個經典的例子是如何模擬穩定的網絡數據, 可以使用Dagger2處理這種情況。

Talk is cheap! 我來講解下如何實現。

Github

1. 配置依賴環境

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

// Lambda表達式
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
    }

    // 數據綁定
    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' // 標注

    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網絡處理
    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標注
}

Lambda表達式支持, 優雅整潔代碼的關鍵。

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

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

Dagger2依賴注入框架, 實現依賴注入. 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標注
}

測試, 在默認配置中添加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
}

數據綁定

android{
    // 數據綁定 
    dataBinding { 
        enabled = true 
    }
}

2. 設置項目

使用數據綁定, 實現了簡單的搜索天功能。

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

    private ActivityMainBinding mBinding; // 數據綁定
    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;
    }

    // 搜索項著色, 會覆蓋基礎顏色, 取交集.
    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); // 加載查詢數據
                return true;
            }

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

    // 加載天氣數據
    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);
    }

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

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

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

數據綁定實現數據和顯示分離, 解耦項目, 易于管理, 非常適合數據展示頁面。

在layout中設置數據。

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

在代碼中綁定數據。

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

搜索框的設置。

    @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;
    }

    // 搜索項著色, 會覆蓋基礎顏色, 取交集.
    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); // 加載查詢數據
                return true;
            }

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

3. 功能測試

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

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

三部曲: Module -> Component -> Application

Module, 使用模擬Api類, MockWeatherApiClient

/**
 * 測試App的Module, 提供AppContext, WeatherApiClient的模擬數據.
 * <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), 設置測試組件, 重寫獲取組件的方法(getAppComponent)。

/**
 * 測試天氣應用
 * <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數據類, 使用模擬數據創建Gson類, 延遲發送至監聽接口。

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

注冊Application至TestRunner。

/**
 * 更換Application, 設置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"; // 因為我們使用測試接口, 設置任何都可以.

    @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設置MainActivity.class測試類。

setup設置依賴注入, 注入TestWeatherApplication的組件。

使用WeatherApiClient的數據, 模擬類的功能. 由于數據是預設的, 不論有無網絡, 都可以進行可靠的功能測試。

執行測試, 右鍵點擊MainActivityTest, 使用Run ‘MainActivityTest’

原文轉載自:


標簽:軟件測試技術軟件測試

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


為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
国产爱情岛在线观看视频 | 日本一区二区精品免费 | 国产盗拍精品视频 | 亚洲欧美日韩国产精品一区二 | 一级大片网站 | 国产乱码精品一区二区三区百度 | 亚洲激情在线播放 | 一区二区中文字幕 | 亚洲综合一区二区三区 | 好看的电视剧在线观看 | 国产精品日韩欧美在线 | 国产欧美在线免费观看 | 亚洲国产精品国语在线 | 国产性色 | 三区噜噜噜 | 国产操女人 | 2025亚洲欧美日韩在线观看 | 偷拍视频一区二区三区 | 国产精品成熟老女人视频 | 国语在线看免费观看视频 | 国产盗拍精品视频 | 午夜性爱视频 | 精品国产aⅴ一区二区三区四川人 | 97精品亚成在人线免视频 | 在线观看精品国产福利片app | 日本三级韩国三级三级a级按 | 国产精品免费在线观看 | 重口视频二区在线观看 | 国产老妇玩伦国产熟女高清 | a在线看| 国产在线视频在线观看 | 国产ts系列紫苑视频在线观看 | 日韩成人在 | 91国偷自产中文字幕婷婷 | 两性色午夜视频在线观看 | 美女aⅴ高清电影在线观看 国产一区二区三区免费在线 | 中文字幕手机在线看片不卡 | 国产在线观看国语对白 | 在线观看的精 | 国产情侣套 | 亚洲一线二线三线免费视频 | 国产一区日韩 | 99相伴健康一生 | 神马电影我不卡影院 | 免费人成黄页网站大全在线观 | 国产免费看插插插视频 | 欧美精品免费在线观看 | 亚洲网站免费观看 | 日本不卡高清免费v日本 | 亚洲精品中文字幕 | 国产suv精品一区二区883 | 欧美日韩视频一区二区三区 | 国产精品亚洲欧美云霸高清 | 欧美亚洲日本中文字幕在线 | 激情中文小说区图片区 | 欧美亚洲高清日本 | 91九色在线观看 | 永久精品免费影院在线观看网 | 国产精品老熟女视频一区二区 | 亚洲一级在线中文字幕 | 色国产精品妇射 | 国产福利小视频在线免费观看 | 免费高清直 | 亚洲网站免费观看 | 日韩在线播放中文字幕 | 99精品一区二区三区 | 亚洲午夜视频在线 | 三年在线 | 国产精品天天在线午夜更新 | 亚洲国产日韩一级精品视频网站 | 激情欧美日韩一区二区 | 日韩免费在线视频观看 | 亚洲一区在线 | 最新福利电影在线看 | 国产精品线在线精品国语 | 91大神大战丝袜美女在线观看 | 亚洲色大成网站www 十年造就经典 | 免费在线观 | 日本亚洲色大成网站www久 | 日本高清视频网址 | 在线成人免费观看国产精品 | 国产一区二区三区 | 欧美综合自拍亚洲综合图区 | 精品入口 | 欧美日韩在线观 | 欧美亚洲中日韩中文字幕在线 | 国产高清国产精品国产专区 | 亚洲欧洲中文字幕免费看 | 国产综合有码 | 片完整片视频在线 | 成人天堂资源在线观看 | 欧美日韩国产一区二区 | 妖精视频免费观看 | 99久热精| 国自产精品手机在线观看视 | 美国精品亚 | 国产精品免 | 91精品在线观看中文 | 国产高清在线a视频大全 | 桃花色综合影院 | 国产精品女人一区 | 亚洲视频一区二区 | 午夜三级中文不 | 中美日韩亚洲中文专区小说 | 尤物视频| 精品国产aⅴ一区天美传媒 开心五月丁香花综合网 | 国产在线ts | 亚洲欧美性生活视频 | 羞羞影院午夜男女爽 | 亚洲国产欧美在线综合 | 99国产视频有精彩视频 | 在线不卡高 | 日韩一中文字 | 日韩精品免| 乳乱公伦爽到爆 | 中文字幕亚洲无线码一区女同 | 国产又湿又 | 亚洲日本一区二区在线观看 | 亚洲高清网站 | 香蕉免费一区二区三区 | 日韩欧美国产免费看 | 精品国产免费一区二区三区香 | 日本一本免费一二区 | 韩剧日剧在线看 | 欧美视频在线第12页 | 大地资源第二页中文高清版 | 在线可以看 | 91国在线精品国内播放 | 国产mv在线天 | 日韩在线一区二区三区观 | 91一区二区午夜免费 | 亚洲综合激情另类小说区 | 手机高清热播韩剧美剧电视剧 | 网站91| 中文免费高清特 | 99精品全国免费观看视频 | 欧美国产另 | 欧美肥熟 | 99热这里只有精品国产4 | 最新在线观看视频国产91 | 国产大片黄在线观看 | 欧美日韩亚洲中文字幕吗 | 亚洲影视网 | 国产亚洲男人的天堂在线观看 | 亚洲区小说区 | 男生晚上睡 | 国产一区二区三区乱码在线观看 | 99在线精品免费视频九九视 | 韩国午夜理伦三级理论在线观看 | 精品国产自在现偷99精品 | 亚洲日韩看片 | 日本高清www色视 | 欧美亚洲视 | 综合乱伦国产中文 | 国产精品专区 | 91精品国产免费青青碰在线观看 | 国产国产人免费人成免费视频 | 欧美日韩一区二区精美视频 | 射精专区一区二区朝鲜 | 亚洲欧美日韩综合一区二区 | 欧美国产激情二区三区 | 亚洲国产香蕉碰碰人人 | 国产黄在线观看免费视频45分钟 | 2025天堂视频精品 | 国产精品国 | 日本不卡一区二区三区在线 | 日本加勒比在线 | 亚洲欧美小说 | 国内20 | 中文字幕精品一区二区三区在线 | 91福利国产视频 | 精品日韩在线一区二区 | 日韩专区在线观 | 影视最全更新最快 | 四库国产精品成人 | 性一交一黄一片 | 免费在线观看 | 企业档案 | 欧美三级短视频 | 最新电影 | 中文天堂网 | 最新好剧电影在线观影平台 | 成人v视频网 | 国产精品视频免费播放 | 2025最新电影电视剧 | 国产精品免费视频一区二区三区 | 日本在线在线亚洲 | 亚洲a在线观看 | 欧美性爱超长大吊网站 | 日本中文字幕有码在线播放 | 欧美又粗又大又长又硬一级a | 国产亚洲精aa在线观看 | 亚洲一本大道中文在线 | 小姨子在旁边差点被看到 | 国产91对白在| 精品剧情v国产在线观看 | 亚洲一日欧美日韩中文字幕 | 成人国产精品日韩 | 两性色午夜视频免费老司机 | 亚洲一区二区天海 | 亚洲一区二区三区不卡精品 | 国产色无| 日韩欧美一区二区三区在线观看 | 午夜高清电影 | 日韩一区二区三区四区区区 | 99这里只有精品视频国产 | 国产欧美日韩在线一区二区不卡 | 2025国产精品www网站 | 欧美亚洲精品一区二区在线观看 | 亚洲色成人www永久在线观看 | 欧美性色aⅴ欧美综合色 | 欧美性xxxxx 欧美亚洲国产经典 | 国产又粗又长又黄又猛又爽视 | 国产9191免费观看在线 | 国产亚洲成年网址在线观看 | 欧美综合亚洲日韩精品区 | 国产伦精品一区二区三区免费 | 激情综合在线观看 | 亚洲另内精品 | 在线成人国产公开视 | 亚洲综合激情另类小说区 | 日本亲子乱在线播放 | 亚洲欧美日韩中文另类不卡 | 中文字幕片 | 亚洲欧美综合视频 | 我们高清观看免费中国片 | 免费网站看v片在线爱的影院 | 国产一级婬片视 | 成人污污污www网站免费 | 亚洲精品在 | 国产全黄三级播放 | 日韩欧美一区二区三区永久免费 | 国产欧美亚洲三区久在线观看 | 国产午夜福利在线播放 | 日本精品欧美一区二区三区 | 欧美亚洲在线观看 | 免费中文| 日本人浓密bbw | 午夜剧场 | 亚洲欧美综合在线精品 | 亚洲а∨天堂2025在线网站 | 国语自产偷拍精品视频偷 | 日本va在线视频国产 | 欧美在线人成北岛玲 | 亚瑟视频在线观看 | 亚洲手机在线人成网站 | 无人区一线二线三线乱码 | 国产玖玖在线观看 | 合肥设计师网 | 免费精品一区 | 99国产视频 | 99久re热视频这里只 | 国产高清一区二区视频 | 国产日韩一区二区三免费高清 | 欧美性猛交xxxxxxxx | 国产中文| 好吊色青青青国产欧美日韩 | 又硬又粗又大一区二区三区视频 | 欧美日韩午夜视频在 | 亚欧美精品一区 | 婷庭九月天综合水蜜桃 | 日韩中文精品视频 | 欧美另类图片视频无弹跳 | 亚洲日本一线产区和二线产 | 日韩欧美亚洲一区 | 亚洲精品中文字幕码专区 | 日本午夜免费 | 国产精品三 | 日韩一区二区三区免费视 | 国产免费一区二区三区免费视频 | 亚洲午夜成人va在线 | 国产精品538 | 精品日产卡一卡二卡国色天香 | 亚洲成a人在线观看片 | 鲁丝一区二 | 国产精品一区二区免费 | 国产又黄又爽刺激视频 | 一级特黄大片欧美99 | 91精品福利自产拍在线 | 经典日韩中文字幕综合网 | 国产精品亚洲无线码在线播放 | 一级一人片 | 欧美日韩成人午夜电影 | 恋丝袜视频| 国产青草精 | 日韩欧美色激情 | 欧美人交a欧美 | 激情综合五月天 | 日本精品中文字幕 | 日本高清中文字幕一区二区三区 | 免费国产小视频在线观看 | 日本精品高清一区二区 | 免费aⅴ网站 | 99精品全国在线观看 | 亚洲日韩国产第一成人 | 一区二区三区精品视频免费播放 | 加勒比一本大道香蕉大在线 | 区二区三区在线观看 | 国产精品v日韩精品v | 亚洲区日韩精品中文字暮 | 娇小teen乱子 | 日韩成人激情影院 | 国产专区在线视频 | 这里只有精品在线视频 | 老熟女重囗味 | 91青青青青国产在线观看 | 亚洲а∨天堂2025在线网站 | 神马影院午夜电影 | 99re热有精品视频国产 | 国产欧美日韩午夜在线观看 | 2025最新电影 | 人人爰人人人人人鲁 | 国产一级视频免费看 | 欧美精品人在线观看 | 国产亚洲中文一区二区三区 | 韩国三级hd中文字幕电影天堂 | 日产精品一线二线三线芒果 | 国产日韩欧美一区二区三区精品 | 肥老上视频 | 国产精品三区四区 | a级国产乱理伦片在线播放 影视网址 | 又大又粗又黄又硬又爽又免费视 | 免费国产老师高 | 玩成熟老熟女视频 | 91黑料精 | 92午夜福利国产精品 | 欧美国产中文字幕 | 试看试看视频 | 国产中文字幕在线观看 | 日产精品一线二线三线 | 国产乱子伦视频大全 | 欧美成精品视频在线观看 | 国产精品第三页 | 中文字幕资源网在线观看免费 | 亚洲热线99精品视频 | 91精品一区二区三区在线播放 | 国产精品| 九九综合九色综合网站 | 亚洲精品自拍愉拍第二 | 一区二区中文字幕 | 91精品视频免费在线观看 | 亚洲国产区男人本色vr | 国产丝袜护土调 | 真实国产乱子伦对白在线 | 911中文字幕免费高清观看 | 日韩最新免费视频一区二区 | 最近韩国电影hd在线 | 亚洲一区精品中文字幕 | 国内自拍一二三四2025 | 第一页欧日韩在线视频 | 一区二区三区在线观看高清视频 | 精品熟女视频一区二区三区 | 91伊人网| 欧美精品三区 | 国产在线观看一区二区三区 | 51精产国品一二三产区区 | 天天综合网~永久入口 | 国产精品黄在线观看免费网站 | 亚洲欧美自偷自拍另类视 | 国产区综合| 亚洲精品制服丝袜四区 | 亚洲色精品三区二区一区 | 午夜电影免费在线观看 | 三级国产 | 被暴雨淋湿 | 欧美午夜不卡在线观看最新 | 日韩争樱花起源 | 日本一本 | 华人亚洲欧美精品国产 | 欧美日韩国产 | 国产精品分类在线播放 | 精品国产黑色丝袜高跟鞋 | 中文字幕在线观看日本 | 国产又黄又爽又猛的免费视频播放 | 在线看片免费人成视频手机观看 | 亚洲视频在线观看精品 | 免费人成网上在线观看 | 欧美激情一区二区三区高清视频 | 精品亚洲一区二区三区在线播放 | 欧美日韩国产码高清 | 亚洲国产日韩a在线播放 | 噜噜噜在线视频免费观看 | 女性女同性aⅴ免费观看 | 亚洲一区精品在线视频 | 色拍自拍亚洲综合图区 | 日欧精品卡2卡3卡4卡5卡 | 福利吧导航 | 亚洲精品国偷自产在线 | bt自拍另类综合欧美 | 国产最新精品精品视频 | 台湾自拍偷区亚洲综合 | 欧美视频亚洲视频日韩动漫 | 国产在线精品9 | 日本一区二区三区免费在线观看 | 日本乱理伦片在线观看中文字幕 | 天美传媒果冻传媒国产电影 | 亚洲va在线va天堂xxxx | 日本在线观看 | 国产日韩欧美在线 | 性爱网在线免费 | 91九色私密保健 | 亚洲日韩在线中文字幕第一页 | 午夜亚洲国产理论片二 | 最新国产精品拍自在 | 亚洲精品成人区在线观看 | 亚洲伊人久 | 欧洲亚洲日本 | 亚洲欧美中文高清在线 | 131美女爱做视频 | 337p日本欧洲亚洲 | 午夜dj在线观看免费中文 | 日本免费人成在线网站 | 亚洲欧美日韩综合在线一区二 | 在线不卡中文字幕 | 国产黑色丝袜美女在线观看婷 | 午夜视频在线观看免费 | 巜大学生特殊 | 九九在线观看精品视频6 | 欧美日韩国产在线激情 | 一区二区三区国产亚洲网站 | 日韩国产一区二区 | 午夜影视在线播 | 经典大片电影免费在线观看 | 乱子伦视频在线看 | 国产一区二区三区免费看视频 | 国产福利萌白酱精品tv一区 | 精品国精 | 黑人巨大精品欧美一区二区免费 | 国产亚洲玖玖玖在线观看 | 国产偷精品免费观看 | 国产黄大片在线视频 | 综合激情五 | 国产日韩欧美小视频 | 国内外精品一区二区三区在线观看 | 欧洲视频 | 最近的2025中文字幕免费 | 亚洲一区二区观看 | 日韩城人网站 | 青草青草久热精品视频在线播放 | 一二三四影视在线看片免费 | 天下第一社区在线观看视频 | 99热久这里都| 欧美国产激情18 | 男人操女人免费在线观看 | 护士张开腿| 国偷自产视频一区二区久 | 亚洲无线码在线一区观看 | 国产精品免费看 | 欧美性bbbbbxxxxx | 夫妻之间免费观看完整版 | 精品国产一区二区三区2025 | 自拍偷拍 | 亚洲日韩一页精品发布 | 亚洲熟女色乱一区二区 | 日韩欧美精品成人免费高清 | 美女视频黄a视频全免费网站二区 | 亚洲日韩精品国产一区二区三区 | 50岁退休| 在线观看最新国产专区 | 忍不住的亲子中文字幕在线 | 真实国产熟睡乱子伦视频 | 亚洲成a人片在 | 大地资源高清日本 | 观看国产色 | 顶级欧美妇高清xxxxx | 亚洲v日韩天堂片 | 7799精品天天综合网 | 快乐加倍!| 话务耳麦 | 美女视频在线永久免费观看 | 69精品人伦一区二区三区 | 美女被男人 | 在线精品国产 | 日韩成人中文字幕在线观看 | 日本中文字幕一区二区有码 | 三年片大全在线观看免费观看大全 | 韩国三级hd中文字幕电影天堂 | 日本网站在线播放 | 国产日韩欧 | 亚洲综合偷拍一区二区三 | 亚洲永久精品一二三网址永久导航 | 秒拍视频| 欧美人与动 | 日韩免费影视 | 国产自经典三级在线观看 | 精品亚洲一区二区三区 | 亚洲男人片片在线观看 | 亚洲一区二区三区 | 国产精品自在自线亚洲 | 国产永久免费高清在线 | 欧美精品亚洲日韩aⅴ | 欧洲视频一区 | 好看的手机电影 | 男人操女人网站 | 2025最新电视剧高清热播 | 亚洲第一视频在线播放 | 在线观看精品国产福利片app | 网站资源多午夜激情影院 | 日本黄页网址在线 | 日本免费影片一区二区 | 中韩欧美视频一区 | 图片区小说区激情区偷拍区 | 91成人午夜性a一级真人片 | 制服丝袜日韩欧美国产 | 日韩在线中文字幕欧美 | 日本精品成 | 亚洲中文字幕dⅴd | 青青草97国产精品免费观看 | 91视频完整版高清 | 亚洲一区二区三区在线观看网站 | 99成人国产精品视频 | 黑人巨大精品欧美一区二区 | 成人年鲁鲁在线观 | 三级特黄60 | 国产午夜亚洲精品午夜鲁丝片 | 国产交换精品一区二区 | 曰本丰满 | 国产mv在线天 | 97高清国语自产拍 | 99热只有这里有99精品 | 国内偷视频在线观看 | 又刺激又爽又黄的视频在线观看 | 欧美日韩一区二区不卡三区 | 国产免费看插插插视频 | 亚洲一级婬片 | 国产欧美乱夫不卡无乱码 | 婷婷亚洲综合一区二区 | 亚洲成aⅴ人片女在线观看 在线观看高清三级综合 | 人伦小说视频在线 | 视频一区二四三区四区 | 中文字幕乱码免费视频 | 日韩在线观看高清视频 | 国产卡戴珊在线根本喂不饱2 | 国产精品va在线播放我和闺蜜 | 国产人妖爆视频在线观看 | 国色天香天天影院综合网 | 午夜福免费福利在线观看 | 亚洲欧美在线观看 | 亚洲综合一区二区 | 欧产日产国产精品精品 | 日韩视频在线观看 | 欧美性爱精品一级大片 | 日韩免费影视 | 日韩美女永久网址在线观看 | 污污视频软件下载 | 国产亚洲情侣一区二区无 | 最近中文字幕免费mv视频7 | 精品三级乱伦免费 | 国产亚洲日韩在线播放不卡 | 日本国产 | 加勒比一本大道香蕉大在线 | 99免费精品 | 亚洲中文国产综合 | 日韩欧美天堂 | 两个人看的视频在线观看 | 欧美a级片视频 | 97视频全国精品 | 九九99九| 亚洲九九九九精品 | 最近的2025中文 | 国产凹凸在线一区二区 | 中日欧洲精品视频在线 | 国产在线精品一区二区 | 欧美日夜干影院 | 欧美在线日韩 | 亚洲日韩欧美 | 欧美日韩另类视频在线观看 | 国产真实乱 | 亚洲国产精品yw在线观看 | 国产欧美日韩一区二区三区在线 | 国产女同女互慰 | 九九热思思精品视频 | 影音先锋在播 | 国产精品素人搭讪在线播放 | 亚洲综合另类小说色六月 | 精品国产乱子伦一区二区三区 | 视频二区日韩 | 自拍影视亚洲高清 | 99re6久| 精品国精品国产国产 | 欧美自拍另类欧美综合图片区 | 国产欧美国日产在线播放 | 精品午夜国产人人福利 | 亚洲自偷自偷精品 | 国产在线精品福利大全 | 中文视频二| 亚洲国产日韩a在线观看 | 国产一级a爱片免费看 | 尤物视频在线网站 | 91精品国产自产在线观永久 | 日本大香伊蕉一区二区 | 三年片免费观 | 色综合视频一区二区三区 | 日产乱码二卡三卡四在线 | 在线看片免费人成视频福利 | 国产伦精品一区二区三区免 | 国产精品视频一区二区 | 国产精品探花一区在线观看 | 国产二区精品视频 | 私人订制1080在线观看免费 | 精品第一国产 | 欧美精品视频手机在线视频 | 欧美亚洲丝袜制服中文 | 热播电视剧电影高清免费在线观看 | 日韩欧美在线 | 精品一区二区成人 | 激情深爱五月开心婷婷综合 | 涩涩热热国产丝袜一区 | 亚洲欧美另类在线图片区 | 丝袜一区二区高跟鞋 | 日本不卡 | 日本福利 | 在线播放真实国产乱子伦 | 日韩亚洲国 | 亚洲日本欧美日韩髙清观看 | 亚洲欧美一区二区三区电影 | 激情自拍三级文学视频激情 | 国产午夜亚洲精品国产 | 国产精品伦理在线 | 在线观看免费人成片 | 日本亚洲精品午夜 | 国产精品日本一区二区在线播 | 午夜成人亚洲理伦片在线观 | 日本高清中 | 国产亚洲美女精 | 51国产愉自视频区视频 | 精品国产福利第一区二 | 精品国产黑色丝袜高跟鞋 | 国产在线91下载 | 亚洲精品国产精 | 在线亚洲人成电影网站色www | 国产男女免费完整视频 | 中字幕一区二区三区乱 | 国产乱妇乱子在线播放视频 | 黑人妖欧美一区 | 视频观看免费国产最新 | 91尤物视频在 | 国内精品手机在线观看视频 | 亚洲综合激情另类小说区 | 国产日本欧美在线一区二区 | 俄罗斯美女真人性做爰 | 中文字幕在线看日本大片 | 国产福利91精品一区二区三区 | 亚永久免费www网站 欧美精品免费在线观看 | 国产福利免费在线观看 | 欧美疯狂黑人xxxxbbbb | 欧美经典日韩精品 | 91福利电影 | 午夜私人影院免费体验区 | 亚洲精品第一国产综合精品5 | 免费看国产精品3a黄的视频 | 欧美日韩变态另类在线观看 | 最新电影电视剧短剧在线观看 | 99热这里只有精品国产4 | 国产手机精品自拍视频 | 欧美日韩一区二区综合在线 | 大地资源高清日本 | 91超精品 | 男人操女人视频 | 欧美丝袜自拍制服另类 | 中文视频二 | 中美日韩亚洲中文专区小说 | 中文字幕乱码免费不 | 国产伦精品一区二区三区男技 | 亚洲不卡一卡2 | 国产一区二区三区在 | 宝贝乖把腿分大一点h欧阳凝小说 | 国产日韩一区二区三免费高清 | 国产欧美国日产在线播放 | 国产激情视频网站 | 91网站在线播放 | 亚洲日本精品va中文字幕 | 一区二区影院 | 日产精品卡2卡3卡4卡免费 | 手机国产视频 | 国在线视频| 99中文字幕精品国产 | 日韩中文字幕高清在线 | 在线观看中文字幕码 | 色天使综合婷婷国产日韩v 国产精品ⅴa在线观看 | 国产一级一片免费播放 | 亚洲制服丝袜自拍中文字幕 | 三年片大全在线观看免费观看大全 | 在线观看成人年视频免费 | 黑人巨大跨 | 国产一区二区高清在线国产综合 | 在线观看免费人成视频国产 | 国产一级一片免费播放 | 综合三级在线观 | 九九中文字幕国产 | 国产自在现偷国产精品国产日韩 | 国产人成| 最近中文字幕免费mv视频7 | 国产亚洲一区二区在线 | 欧美白皙视 | 羞羞视频网站 | 片免费看 | 欧美有色 | 欧美一级在线观 | 亚洲国产精品不卡高清在 | 欧美伦理一区二区三区电影 | 手机在线影院 | 无人视频在线观看免费播放影院 | 亚洲人成网站在线 | 亚洲人成色77777在线观看 | 亚洲国产一区二区三区亚瑟 | 国产精品第八页 | 国产日产欧产精品 | 欧美视频亚洲视频日韩动漫 | 可以看黄的网 | 欧美一区精品视频一区二区 | 欧美在线精品亚洲综合网 | 色偷偷人人澡人人添老妇人 | 婷婷四房综合激情五月在线 | 999精品国产乱 | 国产精品成人观看视频 | 精品国产迪丽热巴在线 | 艳妇野欲 | 国产日韩综合在线视频 | 欧美日韩国产在线激情 | 精品91一区二区三区 | 最新中文字幕 | 国产一区二区三区不卡在线看 | 中文字字幕 | 理论片在线观看 | 可以免费观看的电影网 | 日本免费一区二区五区六区 | 精品日本一区 | 亚洲精品乱码电影在线观看 | 亚洲人成免费网站 | 亚洲欧美另类日韩综合 | 极品国产一区二区三 | 亚州有码91 | 久产久精九国品在线 | 国产视频综| 免费看美女部位隐私网站 | 亚美高清电影网 | 日本一二线不卡在线观看 | 99精品视 | 欧美日韩精品一区二区三区视 | 精品三级影视在线免费观看 | 亚洲国产欧美日韩精品一区二 | 亚洲日韩视频在线观看 | 银杏视频推广下载入口 | 国产美女一区二区三区 | 欧美+日韩+ | 国产女主播一区 | 欧美日韩性生活视频 | 国内自拍网 | 日韩高清亚洲日韩精品一区 | 91九色精品国产自产精品 | 日本亚洲欧美综合视频 | 亚洲欧美日本国产—区二区三区 | 亚洲男人的天堂在线va拉文 | 亚洲精品美女在线观看 | 91精品国产 | 芙宁娜裸身被羞羞漫画 | 天天色天天色 | 精品一区二区三卡四卡网站 | 国产在线 | 一个人看的www视频免 | 亚洲欧美综合另类中字 | 国产一区不卡在线观看 | 亚洲欧美不卡视频在线播放 | 国产日产韩 | 国产又色又爽又黄刺激的影视 | 99国产综合亚洲精品 | 射精专区一区二区朝鲜 | 日韩欧美国产制服丝袜 | 免费国产亚洲精品在线视频 | 国产亚洲欧美视频 | 香蕉97超级碰 | 午夜欧美| 国产福利在线观看永久免费 | 日韩欧美中文精品电影 | 亚洲欧洲中文字幕免费看 | 国产人妇三级视频在线观看 | 99国产视频有精彩视频 | 韩国影院 | 小小的日本高清在 | 国内精品91最新在线观看 | 免费高清观影 | 国产精品边叫边喷水 | 精品国产高清自在线看 | 日韩中文字幕亚洲精品 | 国产丝袜视频在线 | 日韩精品午夜视频一区二区三区 | 性夜影院爽黄a爽免费看不卡 | 国产91剧情在线观看 | 国产麻传媒精品国产v | 精品人伦一区二区三区蜜桃 | 国产视频中文字幕 | 国产精品va视频一区二区 | 五月天激情视频a级在线版 无吗一区二区三区 | 亚洲欧洲另类春色 | 视频在线观看免费 | 日韩精品免费在线观看 | 国产suv精品一 | 成人国产亚洲欧美一区 |