国产精品青草久-国产精品情侣愉拍-国产精品区网红主-国产精品区一区二-国产精品热久久-国产精品热热热-国产精品人aⅴ-国产精品人成在线-国产精品人妻人伦-国产精品人人

金喜正规买球

可靠的功能測試--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
国产精品嫩草影院在线 | 精品亚洲av无码综合网 | avtt天堂网人妻系列 | 国产精品香蕉成人网在线观看 | 91无码人妻精品一区二区蜜桃 | 免费午夜无码片在线观看影院 | 97人人模人人爽人人 | 91久久国产综合 | 亚洲欧美日韩国产综合高清 | 精品一区二区三区无码 | 成人夜色视频网站在线观看 | 白浆免费视频国产精品视频 | 日韩欧美国精品一区二区三区 | 国产成人精品午夜在线观看 | 午夜精品久久久久久中宇 | 国产又爽又黄又嫩又猛又粗 | 亚洲无线 | 亚洲日韩一区二区三区四区高清 | 91影视免费版 | 亚洲国产精品色一区二区三区色 | 亚洲电影有码中文字幕 | 国产精品毛片va一区二区三区 | 狠狠色噜噜狠狠狠狠91 | 亚洲精品成人av免费在线观看 | 九九热国产视频精品 | 国产美女短视频一区 | 国产一区二区三区免费视频 | 在线观看超清全集最新未删减完整版 | 东京热无码一区二区三区分类视频 | 国产一级毛片视频在线! | 91蜜桃传媒精品久久久一区二区 | 韩国精品无码一区 | 东京热之中文字幕 | 中文字幕中出在线观看 | 亚洲av毛| 精品三级 | 91国精产品自偷自偷现象深度解析 | 国产婷婷一区二区三区 | 亚洲精品无码久久久久av麻豆 | 99久久久无码国产精品古装 | 天堂资源官网在线资源 | 国产一卡2卡3卡四卡精品网站 | 国产成人免费a在线视频 | 91久久综合亚洲鲁鲁五月天 | 人人人澡人人人妻人人人爽 | 91精品啪在线观看国产色 | 欧美日韩国产中文精品字幕自在自线 | 国产午夜福利免费看片 | 国产女明星专区视频在线播放 | 国产91精选在线观看导航 | 97国产婷婷综合视 | 九月婷婷人人澡人人添人人爽 | 日本中文字幕一区二区有码在线 | 国产一区二区免费在线观看 | 日韩av毛片不卡无码免费 | 国产三级一区二区三区 | 国产精品色一区二区三区 | 日本成人电影中文字幕 | 无码动漫黄在线观看免费 | 亚洲国产成人精品女 | 午夜亚洲成人福利 | 久久99操 | 天天爱天天做天天爽夜夜揉 | 在线观看国产一区二区三区 | 日本wv一本 | 爆乳一区二区三区无码 | 亚洲爆乳中 | 欧美性大| 国产精品欧美日韩区二区 | 久久99精品久久久久久清纯 | 国产av一区二区三区蜜芽 | 91大神精品在线观看 | 97人人添人澡人人爽超碰 | 日本高清色本在线www游戏 | 精品日韩欧美国产一区 | 午夜福利视频 | 亚洲精品国产品国语原创 | 九色视频安卓最新版1.5下载 | 成人爽a毛片一区二区免 | 国产拍精品亚洲国产高清 | 亚洲午夜无码 | 国产在线观看不卡免费高清 | 91精品国自产在线观看 | 国产va免费精品观看 | 亚洲av永久无码野狼在线观看 | 福利影院 | 国产偷国产亚洲偷亚洲高 | 91福利第一导航 | 黄色视频网站 | 久久av无码精品人妻系列 | 91免费在线看 | 日韩国产欧美亚洲一区不 | 欧美交性又色又爽又黄 | 午夜免费小视频 | 国产精品美女一区二区三区 | 无码人妻精品一区二区三区蜜桃9 | 日产一线二线三线 | 亚洲aⅴ三级一区二区 | 亚洲av无码成人精品区日韩 | 国产欧美另类久久久精品91 | 9lporm自拍视频区 | 99久久精品国产一区二区 | 欧洲美熟女乱又伦av色欲 | av国内精品久久久久影院 | 国产精品视频色拍拍 | 国产大陆亚洲精品国产 | 国产一区二区在线不卡 | 日本欧美中文字幕人在线 | 亚洲精品国产一区黑色丝袜 | 色系一区二区三区四区五区 | 免费一区二区三区 | 毛片无码免费无码播放 | 欧美精品免 | 亚洲国产一区二区在线 | 91在线无码精品秘 | 国产精华液:从成分到功效 国产精华液一线二线三线 国产精华最好的产 | 丰满熟妇乱又伦在线无码视频 | 91香蕉视频在线下载 | 国产操操| 国产一级做美女做受 | 成年女人毛片免费视频播放器 | 国产一区 | 国产精品亚洲v毛片一区二区 | 成人爱做日本视 | a∨片亚洲国产男人的天堂 aⅴ片在线观看 | 91精品啪在线观看国产18 | 午夜福利视频免费看片 | 成人自拍视频免 | 国产v天堂在线观看免费 | 午夜一级无码福利视频99 | 精品一区二区三区视频免费观看 | 日韩人妻无码精品 | 午夜成人影院网站18进 | 国产免费又黄又爽又色毛 | 亚洲精品免播放器在线 | 国产免费观看久久黄av片 | 精品久久av电影 | 香蕉久久av一区二区三区 | 91麻豆精产国品一二三系列产品测评 | 国产毛片久久久久久国产毛片 | 成人免费在线观看午夜福利 | 国产欧美亚洲精品第二区首页 | 91全国免费视频精品 | 91制片厂制作果冻传媒麻豆 | 成人无码精品1区2区3区免费看 | 午夜tv| 国产色啪a∨在线看精品 | 99国产在线观看 | 午夜精品国产爱在线观看不卡 | 无码一区| 日本japa| 国产suv视频 | 人与动物ppt免费模板大全 | 性色av无码无在线观看 | 国产精品嫩草影院在线 | 99久久国产精品免费人妻 | 97制片厂爱豆传媒视频高清 | 国产剧情av麻豆香蕉精品 | 欧亚激情偷乱人伦小说视频 | 风流老太婆大bbw | 日韩欧美亚洲一区二区综合 | 国产91一区二这在线播放 | 少妇与子乱毛片 | 亚洲阿v天堂 | 人妻无码中文字幕免费视频蜜 | 少妇裸体春药高潮精油按摩 | 日本精品三级视频 | 精品影院 | 99精品久久久久久久婷婷 | 精品福利一区二区视频 | av收藏高清在线观看 | 成全视频观看高清在线观看 | 国产av国片精品有毛 | 日本最新一区二区三区免费看 | 亚洲精品高清国产 | 国产成人一区二区三区精品 | 午夜色之午夜视频 | 国产精品精品一区二区三区 | 最新欧美动漫大全免费在线观看 | 精品香蕉在线视频专区 | 亚洲国产精品日韩av不卡在线 | 国产精品va在线观看无码 | 3d动漫精品啪啪一区二区免费 | 国产91色综合 | 国产欧美日韩综合精品一区二区 | 亚洲av无码专区一级婬片毛片 | 亚洲无码 | 韩国三级在线播久 | 午夜成人理论无码电影在线播 | 亚洲成a人片在线v | 精品爆乳一区二区三区无码av | 99久久精品国产区二区三区日韩 | 日本黄大片在线观看视频 | 波多野结衣av高清一区二区三区 | 欧美日韩人妻精品系列一区二区三区 | 91精品全国免费观看 | 亚洲国产成人一区二区精品区 | 99久久香蕉国产线看观香 | 日韩免费在线中文字幕 | 精品国产一级在 | 国产一级av免费观看在线 | 97国产欧美精品一区 | 中文字幕韩国三级理论无码 | 国产av一区| 亚洲av无码之日韩精品 | 欧美牲交a欧美牲交 | 亚洲国产精品高清在线一区 | 99久久国产视 | 欧美亚洲国产精品第一页 | 日本久久久久久久中文字幕 | 中文字幕亚洲情99在线 | 黄网站色视频免费观看无码一区 | 日韩中文字幕免费视频 | 性色av一区二区三区影视 | 日韩福利视频导航入口 | 国产精品无码无在线观看 | 欧美性色欧美a在线在线播放 | 国产精品国产自线拍免费 | 91免费网址 | 一区二区成人国产精品 | 国产人成午夜免 | 九七电影院97网手机版不用下载 | 午夜精品成人毛片 | 精品国产免费第一区二区三区日 | 亚洲综合无码精品一区二区三区 | 日韩精品内射视频免费观看 | 成人国产亚洲精品a区天堂 成人国产一区二区 | 中文字幕伦伦在线 | aⅴ一区二区三区 | 成年午夜免费aⅴ在线观看 成年午夜一级毛 | 欧洲无码| av在观线观看男人的天堂 | 欧美三级不卡在线观看 | 97色涩| 四虎欧美在线观看免费 | 成人黄色视频网址大全 | 精品视频午夜 | 欧美日韩高清在线观看一区二 | 超碰在线观看97青草国产 | 国产精品99| 亚洲国产av永久精品成人 | 国产午夜福利在线视频导航 | 精品无码三级在线观看视频 | 国产精品特级露脸av毛片 | 91香蕉在线观看 | 91香蕉国产线观看免费 | 亚洲午夜电影伦理在线观看 | 国产高潮视频在线播放 | 日韩精品人妻无码不卡 | 福利官方导航 | 无码人妻精品一区二区三区蜜桃9 | 成人看片黄a免费看在线 | 国产日韩手机在线不卡视频 | 国产av一码二 | 亚洲av无码国产综合专区 | 国产在线视频不卡一区二区 | 成年片免费观看网站免费观看 | 亚洲超碰97无码中 | 欧美在线播放一区二区 | 国产综合精品91久久久 | 亚洲avav天堂av在线网毛片 | 亚洲福利一区福 | 国产不卡高清 | 久久东京国产中文字幕 | 国产一区国产精品精品三 | 亚洲av无码专区亚洲av桃花岛 | 无码国产成人午夜电影在线观看 | 亚洲精品成人网 | 精品久久国产视频 | 久久99国产综合精品 | 麻豆精品一区二区 | 亚洲精品无码av中文字幕 | 国产剧情av巨作在线观看 | 午夜理伦三级理论三级 | 欧洲丰满美熟女乱又伦av | 91久久精品一区二区别 | 国产激情精品一区二区三区 | 国产一级做a爰片在线看免费 | 国产一卡2卡三卡4卡精 | 激情在线 | 91精品秘密秘在线观看 | 精品无码一区二区三区 | 一区二区自拍中文字幕福 | 日韩在线免费看网站 | 亚洲精品久久久久久久蜜桃 | 91视频手机app官方下载 | 人妻久久精品天天中文字幕 | 91麻豆精品国产91久久久久久 | 国产精品拍综合在线 | 亚洲精品无码激情av | 一区二区综合色视频 | 天天干天天拍 | 狠狠色综合网站久 | 精品国精品国产自在久国产 | 在线观看高清三级综合 | 亚洲综合国产精品第一页 | 99久久er热在这里都是精品66 | 精品人人妻人人澡人人爽牛牛 | 亚洲日韩国产二区无码 | 一区二区三区欧美 | 国产一区免费在线观看 | 国内偷视频在线观看 | 99国产精品国产精品九九 | 亚洲精品在线观看中文字幕 | 亚洲午夜精品成人毛片 | 天天拍天天夜 | 免费一级久久大片 | 国产一级内射麻豆91 | 综合色区亚洲熟妇另类 | 国产人妻高清国产拍精品 | 黄色在线观看www | 国产三级精品专区欧美激情 | 久久国产成人午夜av影院漫画 | 91成人精品爽啪在线观看 | 亚洲精品欧美综合第四区 | 色婷婷日韩精品一区二区麻豆 | 国产国语特级三级a毛片 | 欧美伊人久久大香线蕉 | 国产成人黄色视频 | 国产精品日韩欧美 | 亚洲一区在线精品 | 黄色大片在线观看 | 97涩涩| 看全色黄大色黄女片18 | 亚洲欧美日韩久久 | a性色生活片久久毛片牛牛 a亚洲欧美中文日韩在线v日本 | 日本黄页网址在线看免费不卡 | 99精品视频 | 国产精品嫩草影院一二三区 | 国产免费观看不卡黄av片 | 国产成人精品日本亚洲专 | 午夜日本电影大全免费播放 | 99久久精品国产毛片 | 国产精品亚洲а∨无码播放麻豆 | 亚洲av少妇高潮流白浆在线 | 91精品在线观看入口火爆更新 | 99在线| 欧美高清一区二区三区 | 日韩精品一区中文字幕在线 | 97色伦背后的神秘故事与深刻思考 | 精品一区二区不卡无码av | 日本爽快片1 | 果冻破解版(果冻视频)下载免费 | 欧美精品国产精品日韩系列 | 91在线亚洲综合在线 | 日韩在线观看第一页 | 亚洲男人的天堂在线aⅴ视频 | 国产在线观看无遮挡无码aⅴ多人 | 亚洲暴爽av人 | 欧美综合缴情五月丁香六月婷 | 午夜精品99一区二区三区 | a片在线 | 91欧美激情一区二区三区成人 | 91久久精品国产91性 | 91po国产在线精 | 91桃色永久免费福利版下载 | 国产日韩在线播放 | 精品国产乱码久久久久久一区 | 91精品综合 | 二区欧美无遮挡中文字幕人成人 | 91伊人 | 国产蜜桃午夜亚洲精品电影网 | 日韩欧美电影在线 | 国产av午夜精品一区二区入口 | 国产高清无码在线视频播放 | 日韩激情无码免费毛片 | 亚洲夜夜骑 | 国产97人人超碰cao蜜芽国产 | 超碰爆乳起爆乳中文字幕系列 | 成人午夜精品视频在线 | 国产a区 | 国产精品视频一区三区四区 | 国产激情久久久久影院 | 三级片国产在线观看 | 人妻系列无码专区久久五月天 | 99热视热频这里只有精 | 亚洲av高清在线一 | 亚洲综合无码一区二区加勒此 | 国产亚洲成归v人片在线观看 | 精品欧美国产一区 | 自在自线亚洲а | 日韩一区| 成人区人妻精品一区二区不卡 | 国产在线精品国自产拍影院午夜 | 国产无套视频在线观看aa在线 | 爆乳一区二区三区无码 | 少妇午夜福利一区二区 | 性欧美欧美巨大69 | 亚洲一级| 国产欧美精品久久三级 | 91欧美在线| 精品国产欧美精品v | 欧美中文综合在线观看 | 亚洲国产成人久久综合野外 | 国产无线乱码一区二三区 | 国产freesexvideos性 | av免费黄色网址 | 国产三级精品三级在线观看专 | 国产精品青青青高清在线密亚 | 午夜熟女插插xx免费视频 | 97青草香蕉依人在线视频 | 精品少妇| 自拍亚洲一区欧美另类 | 国产成人午夜福利在线观看视 | 天天日天天干天天射 | 日本熟妇人 | 国产国产精品 | 精品福利一区二区三区精品 | 91久久人人爽亚洲精品美女 | 亚洲成aⅴ人片在线观看www | av片亚洲国产男人 | 精品91 | 精品国产91久久久久久久黄无码 | 成人午夜精品网站在线观看 | 国产人a片在| 亚洲av无码精品国产午夜久久 | 91大神大战丝袜美女 | 91精品啪国产在线观看 | 国产极品粉嫩美女在线播放 | 亚洲sss整片av在线播放 | 国产av性网站 | 亚洲国产激情电影综合在线观看 | 国产麻豆91传媒入口 | 欧美一级黄色片免费看 | 国产成人va视频在线观看 | 99久国产成人精 | 精品国产91久久久久久无码 | 亚洲第一网站 | 97蜜桃123 | 国产综合一区二区三区黄页秋霞 | 少妇a级毛片人成网 | 波多野结衣一区二区免费视频 | 国产91熟女高潮一区二区 | 精品伦精品一区二区三区视 | 国内大量揄拍人妻精品視頻 | 国产在线麻豆影院 | 97精品国产高清自在线看超 | 黄色网址视频在线播放 | 国产在线观看av在线 | 99精品热在线在线观看视频 | 99久久婷婷国产综合精品青草漫 | 黄色视频在线观看免费 | 日韩国产亚洲欧美成人图片 | 二区三区99 | 国产不卡福利 | 久别的草原电视剧免费观看高清 | 亚洲av无码国产精品夜色午夜 | 亚洲aaaa级特黄毛片发布 | 国产精品成av人在线观看片 | 亚洲午夜成人精品电影在线观看 | 日韩精品电影亚洲一区 | 国产一卡二卡三卡四卡无 | 无码精品视频一区二区三区 | 91免费在线| 国产日产久久高清欧美一区 | 日韩在线中文高清在线资源 | 亚洲国产精品成人综合久久久 | 偷拍亚洲一区二区三区 | 久久91亚洲精品中文字幕奶水 | 国产精品无码mv在线观看 | 97超频在线视频免费观看 | 国产精品无码av无码 | 亚洲精品无码成人aa | 国产综合内射日韩久 | 国偷自产av一区二区三区 | 国产黑色丝袜在线观看一区 | 成人女人爽到高潮的a片羞羞动漫 | 另类欧美色图 | 97夜夜澡人人爽人人喊18进 | 巨乳人妻的誘惑高清完整版在线观看 | 99热国产这里只有精品6 | 日韩中文字幕无码一区二区三 | 国产精品视频一区国模私拍 | 97久久精品久久免费观看 | 精品免费av一区二区三区 | 人妻激情综合久久久久 | 国产噜噜噜噜久久久久久久久 | 91传媒制片厂网址多少 | 无码精品国产va在线观看蜜桃 | 亚洲日韩av无码 | 国产精品资源在线播放 | 91综合久久婷婷久久 | 国产精品欧美亚洲韩国日本久久 | 免费无码午夜精品电影 | 91在线播放免 | 亚洲第一天堂久久 | 成年入口无限观看免费完整大片 | 内射无码av | 91亚洲国产福利在线看 | 色色精品久久久久 | 国产精品无码不卡一区二区三区 | 亚洲中文字幕无码av永久 | 亚洲爆乳中 | 欧洲丰满美熟女乱又伦av | 国产午夜视频高清 | 亚洲一级无码中文字幕 | 午夜亚洲最污忧物福利视频 | 在线视频观看免费视频18 | 国产成人无码免费视频97 | 日韩精品在线免费 | 国产在线视频www | 亚洲精品tv久久久久久久久 | 国产午夜成人久久无码一区二区 | 亚洲性爱免费观看视频 | 国产在线麻豆自在拍91精品 | 无码人妻精品一区二区三区久久 | 亚洲av永久无码精品一区二区国产 | 国产午夜福利 | 国产中文字幕免费不卡 | 精品自拍高清 | 国产中文字幕乱人伦在线观看 | 日本高清www色视频网站 | 精品无码成人网站久久久久久 | 国产午夜福利一区在线观看 | 国内精品自产拍在线观看 | 天天日偷偷干天天操天天 | 国产成人久久 | 国内精品九九久久精品 | 91精品国产综合久久久 | 久久99欧 | 国产精品无码午夜福利免费看 | 午夜人成视频在线男人每天 | 日本xxx在线观看免费播放 | 99尹人香蕉国产免费天天 | 国产一区二区三区无码免费 | 精品一区二区国语对白 | 国产日本高清在线观看 | 国产亚洲精品成 | 精品国产污污免费网站aⅴ 精品国产无码 | 亚洲日韩精品看片无码 | 亚洲永久无码av一区二区三区 | 色天天躁夜夜躁天干天干 | 日本乱人伦片中文三区 | 91成人网站在线 | 91香蕉app下载 | 国产日韩新片无码 | 国产福利萌白酱精品tv一区 | 亚洲精品无码久久久久 | 91欧美激情一区二区三区成人 | 99久久er热在这里都是精品66 | www夜片内射视频日韩精品成人 | 国产av一区高清不卡 | 亚洲国产一区二区精品专区 | 亚洲av高清不卡久久 | 中文字幕一区二区三区在线观看 | 精品无码人妻 | 亚洲国产欧美日韩精品一区二 | 日韩a毛片免费观看 | 99热爱久久99热爱九九热爱 | 欧美日韩精品视频一区二区在线 | 精品国产综合区久久久久久 | 国产在线播放精品 | 国产91王老板在线看 | 东京热无码人妻系列综合 | 中文字幕在线亚洲精品 | 精品午夜久久福利大片免费 | 天天谢天天干 | 精品国产91高清在线观看 | 成人女人爽到高潮的a片羞羞动漫 | 中文字幕无码不卡一区二区三区 | 91嫩草国产 | 一区二区三区精密机械 | 中日韩国 | 性欧美金发洋妞xxxxbbbb | 欧美日产国产精品 | 超碰爆乳起爆乳中文字幕系列 | av无码专区亚洲avl在线观看 | 91视频免费版黄 | 精品人妻系列无码一区 | a级毛片免费视频无码 | 91看视频| 欧美成人免费大片 | 高清亚洲香蕉在线播放av | 国产无遮挡 | 精品国产乱码久久久久久久 | 久久91精品国产9 | 中文字幕亚洲无线码一区女同 | 国产亚洲av片天天在线观看人 | 亚洲一区中文字幕 | 无码人妻少妇伦在线电影 | 亚洲欧美福利一区二区 | 91影视安卓最新版下载 | 91香蕉成人免费高清网站 | 91搞在线视频 | 在线免费观看a级片 | 久久99精品国产麻豆 | 欧洲女人牲交视频免费 | 日本一区二区三区字幕 | 午夜精品久久久99热蜜桃 | 日韩经典午夜福利发布 | 亚洲永久无码永 | 国产激情一区二区三区 | 国产九色视 | 无套内谢少妇毛片a片打工皇帝 | 国产无圣光一区福利二区 | 国产精品久久久久一区二区三区 | 99a16精品久久人人 | 欧美日韩在线亚洲综合国产人 | 波多野结衣中文字幕久久 | www深夜成 | 亚洲荡妇在线观看 | 91精品国产乱码久久久久久 | 中文字幕乱码亚洲∧v日本1 | 欧美日韩午夜一区二区 | 亚洲中文字幕码在线电影 | 熟女丰满老熟女熟妇 | 一区二区视频在线观看高清视频在线 | 91一区二区三区四区五区 | 久久97超碰色中文字幕蜜芽 | 欧美性做爰大片免费看软件男组长 | 日韩潮喷视频在线播放 | 九一国产在线观看 | 亚洲成av人片在线观看网址 | 国产人成久久久精品 | 欧美精品黄页免费高清在线 | 黄色链接在线观看免费 | 国产成人免费高清在线观看 | 精品国产 | 国产欧美日韩一区二区三区在 | 亚洲中文字幕久久精品无码喷水 | 国产精品一区蜜臀91 | 一区二区三区动漫成人在线观看 | 日本高清色视频www 日本高清视频 | 91视频观看| 国产一区二区三区成人欧美日韩在 | 中文字幕视频二区人妻在线 | 精品久久久久久久久 | 亚洲国产成人精品无码区在线网站 | 午夜精品久久久久久中宇 | 毛片无码一区二区三区a片视频 | 亚洲国产欧美日韩v一区二区 | 99re| 亚洲国产一区二区三区 | 久久97人人 | 精品久久久久久亚洲综合网 | 精品一区二区三区国产在线观看 | 91在线无码精品秘国产 | 激情欧美日韩一区二区 | 人人干97 | 91新地址永久入口安全检测 | 欧美婷婷| 91最新电影电视剧综艺动漫在线观看 | 巨爆乳肉感一区二区三区 | 午夜精品久久久久久久影视 | 国产在线观看人成激情视频 | 国产精品美女一区二区三区 | 国产爆乳无码av一区二区 | 一区二区三区久久久av | 国产一区二区视频在线观看 | 亚洲av无码国产综合专区 | 中文字幕人妻一区二区在线视频 | av变态另类天堂无码专区 | 91九色熟女 | 国产经典aⅴ三级观看 | 国产高潮白浆加无码 | 亚洲女人天堂在线观看 | 99久久国产宗和精品1上映 | 日韩精品久久久毛片一区二区 | 精品视频在线 | 人妻中文字幕无码老熟妇 | 亚洲日本va午夜中文字幕一区 | 91香蕉成人app最新版官网 | 国产免费永久视频观看 | 日韩精品无码一区二区中文字幕 | 亚洲国产精品成人精品无码区 | 国产91中文在线播放 | 国产乱码一区二区三区 | 爆乳邻居肉 | 国产区视频在线观看 | 无码精品人妻一区二区三区影院 | 日韩人妻潮喷视频 | 日本高清天码一区在线播放 | 精品人妻无码一区二区色欲aⅴ | 午夜毛片免费看 | 欧美成人家庭影院 | 国产一级一级毛片真人视频 | 国产国产久热这里只有精品 | 亚洲国产精品露脸 | 日韩精品一区二区三区69 | 99亚洲综合精品久久精品 | 国内精品自产拍在线观看 | 天天干人人操 | 中文精品久久久久人妻不卡 | 国产清纯白嫩美女正无套播放 | 91亚洲精品无码久久久久 | 国产精久久一区二区三区 | 亚洲午夜国产精品无码老牛影视 | 国产一级在线观看www色 | 欧美久久天天高清精品 | 日本十八禁视频无遮挡 | 国产资源无限好片 | 国内精品久久久久久久97牛牛 | 亚洲无码在线小视频 | 日韩精品中文字幕 | 亚洲一卡二卡三卡四卡无卡麻豆 | 中文字幕无码乱码人妻系列 | 亚洲欧美一区二区三区不卡 | 亚洲av永久无码精品三区在线 | 国产无码精品久久久久久久 | 国产精品vā在线观看无码 国产精品va在线观看无码不卡 | 国产av一区二区三区 | 日本精品久久久久久久久免 | 国产主播一区二区三区在线观看 | 亚洲国产aⅴ久久综合 | 中文字幕爆乳巨爆乳系列无码 | 尤物yw午夜国产精品视频 | 亚洲中文字幕码在线电影 | 成a在线| 黑人和国产小电影 | 午夜在线观看视频免费成人 | 精品免费小视频 | 日韩无码三级片免费观看 | 无码人妻精品一区二区三区东 | 日本激情网站 | 欧美日韩高清在线观看一区二 | 亚洲精品无码av中文字幕 | 亚洲精品无码久久久久不卡 | 国产91短视频 | 色欲欧美精品一区成人精品 | 亚洲av高清一区二区毛片下卡 | 亚洲成av人片乱码色午夜浪潮 | 精品午夜户外露出一区二区 | 国产精品5 | 国产精品97久久久久久久 | 亚洲午夜一区二区三区在线观看 | 精品國產福利第一區二區三區 | 国产视频一区二区三区四区五 | 97aⅰ内射白浆蜜桃精品 | 国产久9视频这里只有精品 国产久爱免费精品视频 | 黄色网址视频在线播放 | 亚洲av无码专区国产不卡顿 | 香蕉网在线| av春色在线观看 | 在线观看91精品国产 | 国产精品一区高清在线观看 | 成全视频在线观看 | 亚洲精品无码不卡 | 日韩av高潮喷水在线观看 | 久久9精品区| 亚洲国产精人品久久久久久 | 日本最新最全无码不卡免费 | 午夜a级理论片在线播放2025 | 国产欧美亚洲精品第二区首页 | 午夜亚洲嘿嘿嘿在线观看 | 亚洲美女人黄网成人女 | 国产男生夜间福利免费网站 | 日韩视频免费 | 亚洲日本1区2区3区二区 | 国产精品一区二区不卡小说 | 人妻少妇白浆一区二区三区 | 亚洲综合国产精品第一页 | 欧美视频在线视 | 精品久久久久久久久久 | 无码成年人电影免费看 | 国产一区福利 | 精品国产专区91在线尤物 | 亚洲av成本人无 | 成人看片黄a免费看视频 | 果冻传媒国产午夜av密臀 | 国产高清在| 欧美性色xxxxⅹooo | 国产精品66福利在线观看 | 国产一卡二卡三卡四高清 | 97碰碰碰人妻无码视频免费 | 91精品国产综合久久久 | 国产精品网站 | 欧美日韩高清一区二区三区电影 | 成人aaa片一区国产精 | 精品国产自在在线在线观看 | 日韩中文字幕一区二区不卡 | 三年片免费观看大全 | 日韩亚洲av人人夜夜澡人人爽 | 欧美人妻羞羞一区二区三区 | 亚洲欧美日本a∨在线观看 亚洲欧美日本国产一区二区 | 日韩国产成人无码av毛片蜜柚 | 亚洲国产成人一区二区精品区 | 亚洲毛片在线观看av | 三年在线观看免费观看 | 国产福利精品在线 | 特级毛片a级毛片免费播放 特级毛片a级毛片免费观看网站 | 国产激情片免费在线观看 | 国产午夜福利在线播放 | 日本高清免费不卡视频 | 国产激情视频在线观看免费播放 | 国产精品无码久久久久不卡 | 国产激情怍爱视频在线观看 | 国产一级特 | 亚洲欧美高清精品ⅴ | 麻豆一区二区三区精品视频 | 午夜成人精品福利网站在线观看 | av片在线观看永久免费 | 99久久综合国产二区高清闺蜜6 | 成人黄色网站在线播放视 | 国产另类精品自拍 | 国产av国产精品白丝jk制服 | 一区二区三区国产合集 | 韩国理伦片一区二区三区在线播放 | 国产人妻人伦精品1国产 | 禁止18点击进入在线观看尤物 |