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

金喜正规买球

可靠的功能測試--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
国产精品成人aaaa网站女吊丝 | 亚洲日韩国产欧美一区二区三区 | 国产精品成人va在线观看 | 日韩欧美一区二区三区精品 | 午夜理论片y | 91免费永久在 | 欧美精品午夜一二三区 | 国产欧美va欧美va日韩精品 | 视频精品| 爱情岛论坛 | 中文中幕a在线 | 91精品国产 | 国产猛男猛女超爽免费视频 | 国产未成女一区二区 | 精品国产品香蕉在线观 | 欧美亚洲自拍日韩在线 | 国产第二页页在线播放 | 欧美日韩亚洲国产一 | 1卡2卡三卡4卡免费日韩乱码 | 国产亚洲一卡二卡三卡四卡 | 免费精彩视频 | 香港午夜三级a三级高清观看 | 手机在线视频 | 日韩中文字幕精品视频在线 | 日本精品欧美一区二区三区 | 99人精品福利在线观看 | 综合一区二区 | 国产色系视频在线观看免费 | 日韩欧美中文字幕一区二区三区 | 韩剧tv | 日韩精品一区二区免费在线观看 | 99精品国产一区二区 | 在线精品亚洲一 | 免费高清理伦片在线观看 | 最近日本字幕mv | 日本中文字幕专区视频在线 | 无人视频免费观看免费视频 | 99久热海外精品视频 | 成年女人黄小视频 | 日本中文字幕一区二区有码在线 | 国产精品自 | 乱码一码二码三码四码狼人 | 日本在线观看一区 | 国产狂喷潮在线观看中文 | 国产免费专区 | 国产日韩在线观看香蕉一区 | 国产精品亚洲玖玖玖在线观看 | 国产精品国 | 欧美日韩国产综合视频在线看 | 亚洲欧美网站 | 热门影视大全 | 国产高清一区二区三区视频 | 国产一本视频在线播放 | 亚洲精品影院一区二区 | 国产精品偷窥 | 亚洲欧美日韩二区三区 | 91视频直播 | 欧美日韩精品一区二蜜桃在线观 | 欧美激情000ⅹxx同性 | 在线视频直播 | 久热国产vs视频 | 91视频盛宴 | 国产精品乱码一 | 国产精品视频丁香花综合 | 成人一区视频 | 亚洲日韩精品欧美一区二区 | 日韩免费高清大片在线 | 亚洲熟女精品中文字幕 | 两性色午夜视频在线观看 | 国产丶欧美丶日本不卡 | 亚洲精品老司机综合影院 | 国产欧美一区二区三区不 | 国产精品精品 | 手机在线看片 | 国产3344视频在 | 亚洲国产精品成人va在线观看 | 97国产婷婷综合在线视 | 中文字幕∨亚洲日本在线电影 | 国产在线观看免费永久 | 亚洲人成依人成综合网 | 国产v综合v亚洲欧美大 | 银杏影院 | 乱码午夜| 偷窥xxxx | 三级理论电影三级午夜电影院 | 国产羞羞羞视频在线观看 | 日本成本人片免费网站 | 2025最新国产在线看 | 亚洲国产| 免费人成在线蜜桃视频 | 精品国产福利片在 | 亚洲加勒 | 精品国产综合成人亚洲区 | 欧美一级a一级a爱片免费免免 | 99在线精品视频在线观看 | 国产在线精品一区二区三区不卡 | 国产丶欧美丶日本不卡 | 日韩高清免费视频观看 | 无尽动漫性视频╳╳╳3d | 日本高清中文字幕高清在线 | 国产伦一区二区三区蜜桃 | 精品97国产免费人成视频 | 精品精品国产免费看不卡 | 国产h视频在线观看 | 善良的么公和熄日本中文字幕 | 碰夜夜澡日日澡 | 午夜自产精品一区二区三区 | 免费国产午夜在线观看 | 92国产精品午夜福利免费 | 日本一区二区三区视频在线观看 | 欧洲中文日韩亚洲精品视频 | 欧美日本免费一区二区三区 | 国产亚洲日韩欧美在线成 | 亚洲国产高清国产拍精品 | 国产人成亚洲区 | 五月丁六月停停 | 国产午夜亚洲精品国产 | 国产在视频线精品视频二代 | 国产素人视频在线播放 | 视频在线中文字幕亚洲 | 囯产精品一区二区三区线 | 成年人在线免费观看视频 | 成人国产一区二区三区 | 亚洲综合二区 | 观看一区二区视频 | 欧美日韩一区二区三区自拍 | 免费最新电视剧 | 欧美日韩一区二区在线 | 中文字幕v人 | 亚洲va在线观看日本 | 日本好屌色不卡视频在线观看 | 码一码二码w358cc | 国产精品韩国一区二区三区 | 大肉大捧一进一出 | 又黄的免费视频 | 99re热视频这里只有精 | 欧美日韩亚洲中文字幕三 | 欧美激情性猛交 | 亚洲理论电影在线观 | 日本高清无卡码 | 中国领先的综合视频网站 | 国产美女视频国产视视频 | 老少配老妇老熟女中文普通话 | 字在线观看一二区 | 成人国产欧美大片一区 | 国产在线观看视频 | 国产婷婷一区二区在线观看 | 午夜私人影院免费体验区 | 欧美性色黄大片www喷水 | 91看片淫黄大片在看 | 亚洲精品国产精品乱码不卡√ | 欧洲亚洲欧美国产日本高清 | 欧美精品一区二区三区在线播放 | 大伊香蕉精品一区在线 | 亚洲一级a大片一级 | 欧美日韩国产亚洲综合不卡 | 国产精品黄大片在线播放 | 午夜剧场 | 美国特黄三级完整在线电 | 国产精品日本一区二区在线看 | 久碰免费视 | 亚洲大片精品永久免费看网站 | 亚洲欧美中文一区二区三区 | 色吊丝中文字 | 成年女性特黄午夜视频免费看 | 亚洲综合精品网站在线观看 | 亚洲欧美日韩国产综合在线看片 | 青青国产精 | 欧美视频免费看 | 午夜成人理论福利片 | 日韩在线欧美高清一区 | 日韩国产欧美亚洲一区不卡 | 国产国产人视频69免费 | 污污视频在线免费观看 | 爽国产片精品 | 欧美怡红院免费全部视频 | 国产精品成人观看视频 | 午夜福利在 | 韩日国产精品一区二区三区 | 97人伦色伦成人免费视频 | 亚洲区小说区 | 亚洲男人的 | 不用播放器的a网站 | 福利片午夜免费观着 | 亚洲一区二区三区免费视频 | 亚洲精品夜夜夜 | 99在线精品免费视频九九视 | 337p亚洲| 成人欧美视频在线观看 | a级情欲片在线观看 | 性激烈的欧美三级视频 | 精品国产爱片 | 亚洲欧美综合人成在线 | 国产素人视频在线播放 | 午夜淫片 | 国产精品露脸国语对白99 | 国产精产国品一二三在观看 | 国产乡下三级全黄三级bd | 成人a大片高 | 国产日韩欧美在线观看 | 国产精品专区第1页 | 国产日本韩国视频 | 一区视频观看 | 性生大片免 | 国产未成女一区二区三区 | 成年动漫h视频在线观看 | 亚洲卡一卡二 | 精品蜜桃秘?一区二区三区 成人年鲁鲁在线观 | 国产精品一级在线观看 | 欧美亚洲一区二区三区 | www.美色吧 | 网站国产 | 99久高清| 日韩伦理一区二区三区 | 美女大黄三级视频在线观看 | 最近中文字幕完整版免费视 | 妖小槡bbbb槡bbbb槡 | 国产一卡二卡三卡四卡在线看 | 日韩乱码精品中文字幕不卡 | 国产精品女同一区二区在线 | 中文字幕久热精品 | 97蜜桃网 | 91青青草原| 欧美黑人巨大精品一区二区三区 | 亚洲日本欧美日韩中文字幕 | 99视频在线免 | 亚洲一区国产日韩午夜在线观看 | 国产精品秘入口免 | 一区二区三区中文 | 在线免费观看国产 | 日韩亚洲欧美一区噜噜噜 | aaaa级日本片免费视频 | 日韩国产欧美精品综 | 国产激情澎湃视频在线观看 | 亚洲一区二区影视 | 91极品尤物在线观看 | 国产欧美一区二区三区在线看 | 亚洲一区激情校园小说 | 亚洲第一影院中文字幕 | 一区二区三区精品视频免费播放 | 秋霞电影亚洲一区二区三区 | 亚洲国内精品 | 中文国产日韩欧美视频 | 男人操女人免费在线观看 | 国语fre| 日韩精品一区二区三区中文在线 | 午夜一区一品日本 | 欧美一级大 | 亚洲一区二区三区在线观看播放 | 中文字幕日韩精品一区二区三区 | 中文字幕制 | 日韩亚洲国产欧美在线看片 | 国产在线一区二区三区不卡 | 99热日韩 | 日韩精品一区二区三区在线 | 国产在线视频 | 亚洲伦理一区二 | 老牛影视电影网 | 亚洲视频天堂 | 亚洲资源最新版在线观看 | 日本成熟丰满老妇xxxx | 欧美日韩国产一级 | 精品国自产拍视频 | www黄在线观看 | a在线视频观看 | 亚洲aⅴ无| 好吊操视频这里只有精品 | 免费在线电影网站 | 中文字幕九热精品视频在线 | 亚洲欧美中文一区二区三区 | 国产欧美日韩在线一区二区不卡 | 中文字幕精品视频第一区第二 | 日韩视频免播放在线观看 | 18出禁止看的啪视频网站 | 欧美人成网站中文字 | 精品欧乱仑在线 | 欧美丰满大 | 强伦轩一区二区三区四区播放方式 | 亚洲视频一区二区三区四区 | 国产在线观看精品一区二区三区 | 亚瑟视频在线观看 | 一区二区三区四区国产免费 | 免费免费视频片在线观看 | 天美传媒果冻传媒国产电影 | 亚洲男人夜夜精品电影 | 丝袜一区在线 | 亚洲精品动漫一区二区三区在线 | 国产色秀精品综合 | 精品国产福利第一区二 | 国产手机在线国内精品软件的特点 | 国产精品果冻传媒在线 | 日韩视频高清欧美一区 | 亚欧美精品一区 | 51精品国产人成在线观看 | 午夜福利门事件国产在线 | 国自产拍在线视频天 | 91精品乱码一区二区三区 | 高清影视电视剧在线观看 | 日韩种子 | 欧美精品黄页在 | x8x8国产在线最新地址 | 国产精品h片在 | a级国产乱理伦片在线观看 天美传媒官方网站 | 国产美女遭 | 99视频在线观看精品29 | 亚洲第一页中文字幕 | 2025年最新偷拍视频一区 | 日韩亚洲欧洲精品婷婷涩 | 免费视频专区一国产盗摄 | 中国在线观看免费国语版 | 国产精产国品一二三在观看 | 欧美日产欧美日产国产精品 | 亚洲经典日韩欧美国产一区 | 亚洲国产精品yw在线观看 | 欧美日韩国产区在线观看 | 亚洲国产激 | 免费岛国| 国产精品丝袜一区二区三区 | 日本在线日本中文字幕 | 国产免费中文综合 | 免费观看又污又黄的网站 | 国产永久在线观看 | 在线午夜看片福利深夜导航 | 欧美日韩午夜视频在线观看 | 日韩欧美中文精品电影 | 国产偷窥成熟女精品视频 | 日本视频中文字幕一区二区 | 亚洲日本在线播放视频 | 日日夜夜骑 | 免费一区二区视 | 涩涩视频午夜福利一区二区 | 亚洲黄免费看网站国产福利一区二 | 全日爱韩国视频在线观看 | 日日精品国产高清国产专区 | 精品福利一区二区在线 | 国产高清 | 国产在线高清精品三区 | 1769国产精品视 | 91伊人国产 | 亚洲欧美日韩国产综合在线看片 | 伊人久色 | 制服丝袜中文字幕在线 | 欧美肥熟 | 国产精品亚洲一区二区三区在线 | 欧美一区二区三区免费观看视频 | 欧美精品视频免费看 | 亚洲欧美日韩一区中文字幕 | 日韩欧美国产精品 | 日本高清视频在线www色下载 | 亚洲欧美日韩在线综合网 | 8x8x精品一区二区 | 日本在线观看 | 秋霞影院 | 日韩亚洲欧美一区二区三区 | 亚洲欧美日韩激情在线观看 | 中文字幕综 | 2025国产精品国产精华 | 中文字幕免费观看一区 | 小罗莉极品一线天在线 | 收集最新中文国产中文字幕 | 在线观看精品日韩视频 | 最新日本一道免费一区二区 | 五月丁香六月综合激情在线观看 | 在线免费观看亚洲 | 在线不卡中文字幕 | 国产99日韩精品第一页 | 2025最新热播电影电视剧 | 午夜不卡视频 | 日本护士视频欧美无砖专区 | 人人色在线视频播放 | 国语对白精品一区二区在线观看 | 狼人亚洲国内精品自在线 | 91视频欧美国产 | 特黄a三级三级三级视频 | 国产熟女绯色一区二区三区免费 | 欧美浓毛大泬视 | 国产高清在线视频伊甸园 | 日韩一区二区三区免费网站 | 国产98色在线 | 亚洲欧美人成综合在线最新 | 囯产精品| 国产盗摄xxxx视频xxxx | 91人前露出精品国产 | 国产综合精品一区 | 国产男女免费完整视频网页 | 宅男噜噜噜一区二 | 日韩电影手机在线观看 | 8x8ⅹ国产精品| 国产精品一区二区亚瑟不卡 | 国产末成年女噜噜 | 成人污污污www网站免费丝瓜 | 欧美日韩国产激情一区 | 99re5在线精品视频热线 | 国产亚洲男人的天堂在线观看 | а8天堂资源在线官网 | 欧美日韩国产精品视频 | 精品日韩在线视频一区二区三区 | 精品人伦一区二区三区 | 日韩精品午夜视频一区二区三区 | 日本一二线不卡在线观看 | 亚洲精品自拍愉拍第二页 | 国产自在现偷国产精品国产日韩 | 清纯唯美亚洲 | 美国成人影院 | 日韩精品无 | 红杏亚洲 | 91精品国产免费青青碰在线观看 | 老女人牲 | 中文字幕在线看日本大片 | 又粗又黄又猛又爽大片免费 | 国产精品成人免费视频网站京东 | 精品日韩| 国产在线91精品入口 | 国产欧美日韩精品a在线观看高清 | 国产欧美亚 | 亚洲日韩视频在线观看 | 一区二区三区免费视频 | 亚洲欧美综合网站 | 国偷自产视频一区二区久 | 中文字幕在 | 99精品视频在线观看 | 国产精品一区二区高清在线 | 国产一区二区三区不卡在线观看 | 97福利精品第一导航 | 精品亚洲 | 海角国精产品一区一区三区糖心 | 国产在线精品福利大全 | 成人午夜影院网站 | 亚洲欧美日韩一区在线 | 97se色综合一区二区二区 | 国产手机视频在线 | 91色色 | 在线精品国产一区二区三区 | 达达兔欧美午夜国产亚洲 | 欧美性黑人极品hd另类 | 偷国内自拍视频在线观看 | 91拍拍在线观看 | 日产精品一线二线三线芒果 | 真实国产乱子伦对白在线 | 韩日国产精品一区二区三区 | 日韩大片在线永久免费观看网站 | 午夜理论片y| 豆国产94亚洲欧美 | 欧美日韩亚洲一区二区三区 | 日本一二三区视频在线 | 国偷自产视频一区二区久 | 91成人国产网站在线观看 | 香蕉香蕉国产片一级一级毛 | 亚洲春色在线视频 | 自拍偷在 | 国产激情a∨ | 欧美亚洲丝袜制服中文 | 免费观看网站 | 亚洲成a人片在线观看一级 精品国产自 | 国产香蕉视 | 国产精品成人h片在线 | 日本一道一区二区免费看 | 亚洲欧美日韩国产综合专区 | 香蕉影院中文字幕视频在线观看 | 欧美日韩亚洲一区二区三区 | 国产亚洲精品a在线观看app | 码一码二码w358cc | 成a人片在线观 | 亚洲性日韩精品一区二区 | 亚欧成人中文字 | 欧美三区日韩一 | 亚洲一区二区三区高清 | 天天爱天天做天天做天天吃中 | 国产高清在线精品二区一 | 7799精彩视频天天看网站 | 福利乱伦视频 | 精品午夜日韩 | 国产精品白丝 | 成人a级高清视频在线观看 91免费视频网站 | 日韩欧美精品一 | 国产高清一区二区三区视频 | 色国产综合免费视频在线播放 | 韩国欧美一区二区 | 精品国产二区亚洲日本精品 | 97人人超 | 亚洲人成网国产最新在线 | 精品国产午夜福利精品推荐 | 国产91青青成人a在线 | 日韩一二三区视频精品 | 九九99精品 | 热播韩剧网 | 又刺激又爽又黄的视频在线观看 | 亚洲中文字幕在线观看视频 | 成人免费一区二区三区视 | 亚洲制服丝袜一区二区三区 | 亚汌国产 | 欧美精品一区 | 99爱国产精品免费高清在线观看 | 国产a∨天天免 | 国产免费不卡v片在线观看 日本一区视频在线播放 | 精品日韩一区二区三区 | 免费看高视频hh网站免费 | 亚洲精品亚洲字幕 | 91精品国产福利在线观看麻 | 欧美高清日韩在线 | 欧美激情视频免费 | 欧美日韩国产一区二区三区在线 | 中文字幕美日韩在线高清 | 在线亚洲一区二区三区四区 | 欧美日韩在线精品一区二区三区 | 国产精品免费一区二区 | 国内外成人激情免费在线视频 | 亚洲十大国产精品污污 | 亚洲国语中文字幕理论片 | 亚洲日本一区二区在线观看 | 中国在线观看免费国语版 | 欧美综合日韩 | 国产亚洲精品精品国产亚洲综合l | 99热这里只有精品国产4 | 秋霞伦理电影在线看 | 成人免费在线视频观看 | 日韩美女欧美精品 | 国产大码无尺度视频在线 | 国产乱子影视频上线免费观看 | 亚洲日韩欧美在线一区二区 | 国产3344视频在线观看 | 国产精品v日韩精品v | 亚洲人成中文字幕在线观看 | 日本三级带日本三级带黄首页 | 国产大秀视频一 | 国产一区三区二区中文在线 | 成人欧美一区二区三区在线蜜 | 超薄肉色丝袜一区二区 | 成人日韩精品一区二区 | 99ri日韩精品视频 | 国产羞羞又硬又粗又长又大 | 看一级特黄a大一片电影 | 国产女技师按摩在线观看 | 国产宅男宅女在线观看 | 91精品国产福利在线观看麻 | 欧美日韩在线一区 | 97午夜理论片在线影院 | 五月婷婷丁香色 | 成人+在线+ | 欧美日韩综合另类 | 国产丝袜护土调 | 一级a一片在线播放国产 | 日韩精品一区二区三区视频网 | 国产欧美一区二区精品仙草咪 | 欧洲乱码伦视频免费国产 | 欧美激情国产日韩 | 亚洲日韩精品免费视频91蜜桃 | 999国内精品永久免费观看 | 善良的岳hd中字伦理 | 91网首页 | 精品国产一区二区一区二 | 日韩欧美性爱精品一区二区 | 精品国产日韩一区二区三区 | 亚洲欧美在线观看 | 在线日本看片免费人成视久网 | 国产精品成人aaaa网站女吊丝 | 国产精品特级露脸视频 | 精品乱子伦一区二区三区 | 亚洲美女高 | 国产费视频在线观看 | 黄页网站在 | 国产午夜福利在线永久视频 | 香蕉电影| 日韩一级欧美一级一级国产 | 中文字幕无吗热视频 | 亚洲国产日韩在线人成电影 | 亚洲产国偷v产偷v自拍色戒 | 日韩欧美一区二区三区视频 | 国产日韩欧美亚洲精品中字 | 91精品国产品国语在线不卡 | 日本一区二区三区精品视频 | 亚洲网站视频在线观看 | 色午夜日本高清视频www | 97人人超人人超国产免费 | 国产宅男宅女在线观看 | 免费一区二区三区视频 | 国产农村妇女精品一二区 | 小草青青手机免费视频影院 | 成人日韩在线视频观看 | 午夜福利理论片高清在线观看 | 亚色九九九全国免费视频 | 最近中文字幕完整版2025一页 | 亚洲综合视频在线观看 | 日日爽天天 | 99这里只有精品视频国产 | 神马电影院 | 电视剧大全免 | 国产精品视频观看 | 欧美一级成在线人 | 国产精品免费视频观看玖玖 | 午夜性色一区二区三区不卡视 | 999热这里只 | 国产肥熟老 | 久碰免费视 | 成年女人免费毛 | 护士精品一区二区三区 | 国产三j | 337p日本欧洲亚洲 | 午夜福利不卡片在线播放免费 | 亚欧人成| 色欧美老角色 | 亚洲专区欧美专区 | 一本大道中文日本香蕉 | 国产精品福利区一区二区三区四 | 敌伦交换一区二区三 | 国产欧洲精品自在自线官方 | 92午夜福利1000集在线看 | 女人的天堂a国产 | 免费国人国产免费看片 | 中文字幕日韩精品一区二区三区 | 偷拍激情视频一区二区三区 | 又黄的免费视频 | 视频一区二区在线 | 亚洲国产精品国自产拍a∨ 麻花影视在线看电视剧软件 | 中文字幕按摩做爰 | 亚洲人成网 | 欧美日产国产精品 | 国产精品性爱视频 | 污污视频软件下载 | 欧美喷潮系列在线观看 | 天美传媒在线观看果 | 三级精品在线观看自拍 | 丝袜国产精品亚洲 | 99r在线精品视频在线播放 | 亚洲精品一本四区91 | 亚洲精品v欧 | 精品国产一区在线观看 | 亚洲国产日韩a在线亚洲 | 日韩激情不卡一 | 日本中文字幕乱码 | 欧产日产国产精品精品mp4 | 欧美性猛交xxxx乱大交极品 | 亚洲精品国偷自产在线 | 亚洲日本va午夜在线影院 | 黄页网站在 | 片午夜在线观看 | 欧洲成人精品高清在线观看 | 欧美又粗又 | 一级女性全黄生活片免费 | 亚洲一区二区精品 | 中文字幕制服丝袜一区二区三区 | 欧美激情观看一区 | а8天堂资源在线官网 | 亚洲国产日韩欧 | 国产福利精品一区二区 | 中亚洲文日韩一区 | 91干逼网| 精品一区二区三区影院在线午 | 成年免费大片黄在看 | 欧美高清免费一 | 亚洲欧美日韩精品自拍 | 一级午夜福利 | 精精国产xxxx视频在线 | аⅴ资源天堂资源库在线 | 国产在视频线精品视频二代 | 女同恋性一区二区三区四区 | 91人成在线观看网站 | 国产欧美网址 | 日本亚洲欧洲免费无线码 | 欧美日韩精品一区二区在线播放 | 免费国产在线精品一区 | 国产福利一区二区三区在线观看 | 日本高清乱理伦片中文字幕 | 99视频热这里只有精品 | 日本永久免费aⅴ在线观看 噼里啪啦hd免费观看动漫 | 丁香花在线观看免费观看图片 | 国产视频美女精品福利社 | 欧美高清一区二区三区欧美 | 韩国精品视频一区二区在线播放 | 日本欧美中文字幕精品一区 | aⅴ日本亚洲欧洲免费 | 亚洲天堂偷拍日韩中文字 | 2025年最新高清热播电影 | 欧美午夜理伦三级在线 | 大全在线观看 | 免费国产h视频在 | 天天色亚洲 | 午夜一区二区在线观看 | 日本国产 | 国内精品视频九九九九 | 日本中文一二区 | 91精品视品在线播放 | 高清欧美性猛交xxxx黑人猛交 | 国产在线国偷精品免费看 | 红杏亚洲 | 91福利国产在线观一区二区 | 日本午夜免a费看大片中文4 | 手机免费在线日韩电影大片 | 国产精品一区二区三区免 | 日本精品国产一区二区在线 | 亚洲亚洲人成网站77777 | 国产精品自在自线亚洲 | 国产福利 | 国产suv精品一区二区 | 激情国产原创在线观看 | 国产日韩精品在线播放 | 美女网站在线免费观看 | 日本夫妻激情生活b区 | 国产精品综合影院在线观看 | 亚洲人免费视频 | 国产精品手机免费 | 免费观看一区二区三区 | 91精品国产亚一区二区三区 | 国产欧美日韩综合一区 | 在线欧美精 | 日韩四色在线视频观看网站 | 欧美精品亚洲精品日韩专区v | 中文字幕在线观看亚洲 | 三级三级三级a级全黄 | 亚洲日本va在线视频观看 | 亚洲欧美网站 | 九九热这里只有精品视频 | 日韩美女永久网址在线观看 | 亚洲一区在线免费 | 国产凸凹视频一 | 全部视频欧美日韩在线无人 | 国产乱码一区二区三区爽爽爽 | 欧美国产精品 | 亚洲精品国产精品 | 国产性爱在线观看 | 国产乱女乱子视频在线播放 | 国产人成精品综 | 香蕉亚洲精品网站国产一二三四 | 一本大道综合伊人精品热热 | 五月天婷婷丁香中文字幕 | 在线看国产精品 | 桃色在线观看 | 国产在线观看一区精品 | 综合激情五 | 亚洲制服中文字幕一区二区 | 国产盗摄电影区9876色 | 欧美日韩国产yw在线 | 日本一区不 | 亚洲无卡免费 | 亚洲欧美日韩中文字幕在线不卡 | 国产亚洲中文一区二区三区 | 亚洲精品国产精品乱码不卡√ | 精品国产一区二区三区香蕉欧美 | 国产狼人视频 | 91视频专区 | 日韩精品亚洲a | 国产欧美日韩在线播放 | 日皮视频免费观看 | 国产精华液和欧美的精华液的区 | 色男人在线电影视频网站 | 美足脚交国产在线观看 | 亚洲国产aⅴ综合网 | 丰满大码的熟女在 | 亚洲色大成网站www永久网站 | 欧美日韩一区二区不卡在线播放 | 国产精品秘果冻 | 国产伦精品 | 黄工厂精品视频在线观看 | 国自产拍在线视频天 | 一区国严二区 | 欧美性猛交xxxx乱大交 | 老熟女网站 | 精品国产蜜桃臀在线观看 | 欧美国产日韩另类 | 国产h片在线观看视 | 国产在线日韩在线 | 欧美视频在线观看一区二区 | 亚洲精品国产电影 | 欧美日韩中文国产一区发布 | 亚洲国产一区欧美 | 三年在线 | 国产精品婷婷午夜 | 一区二区免费国产在线观看 | 国产一区二区视频在线观看 | 日本欧美大| 不卡中文字幕激情视频网站 | 最近高清中文字幕免费mv视 | 亚洲精品亚洲精品亚洲精品日韩 | 欧美女同小视频在线网站 | 欧美性xx| 欧美三级韩国三级日本三斤 | 亚洲成a人一区二区三区 | 国产自产拍精品视频免费看 | 顶级欧美妇高清xxxxx | 亚洲色偷偷综合亚洲v | 区二区三区新线路 | 热播电视剧 | 国产欧美日韩一区二区三区在线 | 精品免费| 在线日韩欧美一区二区三区 | 亚洲国产经典国产精品观看免费 | 欧美国产在精品 | 首播影院 | 91精品国产闺蜜国产在线闺 | 午夜福利体验免费体验区 | 亚洲欧美一区二区在线 | 欧美海外国产 | 欧美人成在线播放网站色 | 国产制服精品一区二区视色 | 国产激情影视综合 | 免费91最新地址永久入口 | 成人永久免费视频网站 | 亚洲综合激情五月丁香六月 | 免费动漫|