日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mockito 静态方法_Mockito –带有注释和静态方法的额外接口

發布時間:2023/12/3 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mockito 静态方法_Mockito –带有注释和静态方法的额外接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mockito 靜態方法

在代碼中,我最近遇到了一段非常糟糕的代碼,該代碼基于對對象執行某些操作的類轉換。 當然,代碼需要重構,但是如果您首先沒有對該功能進行單元測試,則有時您可能無法做到/或者不想這樣做(這應該是可以理解的)。 在下面的文章中,我將展示如何測試這種代碼,如何重構它以及實際上我對這種代碼的看法。

讓我們看一下項目結構:

如關于Mocktio RETURNS_DEEP_STUBS for JAXB的帖子中所述,我們再次在com.blogspot.toomuchcoding.model包中使用了JAXB編譯器生成的JAXB類。 讓我們省略對pom.xml文件的討論,因為它與上一篇文章完全相同。

在com.blogspot.toomuchcoding.adapter包中,我們在JAXB PlayerDetails類上具有適配器,該類提供對Player接口的訪問。 有:

CommonPlayerAdapter.java

package com.blogspot.toomuchcoding.adapter;import com.blogspot.toomuchcoding.model.Player; import com.blogspot.toomuchcoding.model.PlayerDetails;/*** User: mgrzejszczak* Date: 09.06.13* Time: 15:42*/ public class CommonPlayerAdapter implements Player {private final PlayerDetails playerDetails;public CommonPlayerAdapter(PlayerDetails playerDetails){this.playerDetails = playerDetails;}@Overridepublic void run() {System.out.printf("Run %s. Run!%n", playerDetails.getName());}public PlayerDetails getPlayerDetails() {return playerDetails;} }

DefencePlayerAdapter.java

package com.blogspot.toomuchcoding.adapter;import com.blogspot.toomuchcoding.model.DJ; import com.blogspot.toomuchcoding.model.DefensivePlayer; import com.blogspot.toomuchcoding.model.JavaDeveloper; import com.blogspot.toomuchcoding.model.PlayerDetails;/*** User: mgrzejszczak* Date: 09.06.13* Time: 15:42*/ public class DefencePlayerAdapter extends CommonPlayerAdapter implements DefensivePlayer, DJ, JavaDeveloper {public DefencePlayerAdapter(PlayerDetails playerDetails){super(playerDetails);}@Overridepublic void defend(){System.out.printf("Defence! %s. Defence!%n", getPlayerDetails().getName());}@Overridepublic void playSomeMusic() {System.out.println("Oops I did it again...!");}@Overridepublic void doSomeSeriousCoding() {System.out.println("System.out.println(\"Hello world\");");} }

OffensivePlayerAdapter.java

package com.blogspot.toomuchcoding.adapter;import com.blogspot.toomuchcoding.model.OffensivePlayer; import com.blogspot.toomuchcoding.model.PlayerDetails;/*** User: mgrzejszczak* Date: 09.06.13* Time: 15:42*/ public class OffensivePlayerAdapter extends CommonPlayerAdapter implements OffensivePlayer {public OffensivePlayerAdapter(PlayerDetails playerDetails){super(playerDetails);}@Overridepublic void shoot(){System.out.printf("%s Shooooot!.%n", getPlayerDetails().getName());} }

好的,現在讓我們轉到更有趣的部分。 讓我們假設我們有一個非常簡單的玩家工廠:

PlayerFactoryImpl.java

package com.blogspot.toomuchcoding.factory;import com.blogspot.toomuchcoding.adapter.CommonPlayerAdapter; import com.blogspot.toomuchcoding.adapter.DefencePlayerAdapter; import com.blogspot.toomuchcoding.adapter.OffensivePlayerAdapter; import com.blogspot.toomuchcoding.model.Player; import com.blogspot.toomuchcoding.model.PlayerDetails; import com.blogspot.toomuchcoding.model.PositionType;/*** User: mgrzejszczak* Date: 09.06.13* Time: 15:53*/public class PlayerFactoryImpl implements PlayerFactory {@Overridepublic Player createPlayer(PositionType positionType) {PlayerDetails player = createCommonPlayer(positionType);switch (positionType){case ATT:return new OffensivePlayerAdapter(player);case MID:return new OffensivePlayerAdapter(player);case DEF:return new DefencePlayerAdapter(player);case GK:return new DefencePlayerAdapter(player);default:return new CommonPlayerAdapter(player);}}private PlayerDetails createCommonPlayer(PositionType positionType){PlayerDetails playerDetails = new PlayerDetails();playerDetails.setPosition(positionType);return playerDetails;} }

好的,所以我們有制造Player的工廠。 讓我們看一下使用工廠的服務:

PlayerServiceImpl.java

package com.blogspot.toomuchcoding.service;import com.blogspot.toomuchcoding.factory.PlayerFactory; import com.blogspot.toomuchcoding.model.*;/*** User: mgrzejszczak* Date: 08.06.13* Time: 19:02*/ public class PlayerServiceImpl implements PlayerService {private PlayerFactory playerFactory;@Overridepublic Player playAGameWithAPlayerOfPosition(PositionType positionType) {Player player = playerFactory.createPlayer(positionType);player.run();performAdditionalActions(player);return player;}private void performAdditionalActions(Player player) {if(player instanceof OffensivePlayer){OffensivePlayer offensivePlayer = (OffensivePlayer) player;performAdditionalActionsForTheOffensivePlayer(offensivePlayer);}else if(player instanceof DefensivePlayer){DefensivePlayer defensivePlayer = (DefensivePlayer) player;performAdditionalActionsForTheDefensivePlayer(defensivePlayer);}}private void performAdditionalActionsForTheOffensivePlayer(OffensivePlayer offensivePlayer){offensivePlayer.shoot();}private void performAdditionalActionsForTheDefensivePlayer(DefensivePlayer defensivePlayer){defensivePlayer.defend();try{DJ dj = (DJ)defensivePlayer;dj.playSomeMusic();JavaDeveloper javaDeveloper = (JavaDeveloper)defensivePlayer;javaDeveloper.doSomeSeriousCoding();}catch(ClassCastException exception){System.err.println("Sorry, I can't do more than just play football...");}}public PlayerFactory getPlayerFactory() {return playerFactory;}public void setPlayerFactory(PlayerFactory playerFactory) {this.playerFactory = playerFactory;} }

讓我們承認吧……這段代碼很糟糕。 在內部,當您查看它時(不管它是否使用了 operator 實例 ),您都會感覺到它是邪惡的。 正如您在代碼中看到的那樣,我們正在進行一些類強制轉換……我們到底如何進行測試? 在大多數測試框架中,您無法對模擬進行此類類轉換,因為它們是使用CGLIB庫構建的,并且可能會拋出一些ClassCastExceptions。 您仍然無法返回模擬和真實的實現(假設它們在構造過程中不會執行任何丑陋的工作),并且它實際上可以工作,但仍然如此–這是錯誤的代碼

Mockito可以使用其extraInterfaces功能(盡管您不應該過度使用此功能-實際上,如果您需要使用它,請考慮對其進行重構):

extraInterfaces

MockSettings extraInterfaces (java.lang.Class <?>…接口)

指定模擬應實現的額外接口。 對于遺留代碼或某些極端情況可能很有用。 有關背景信息,請參見此處的問題51。此神秘功能應偶爾使用。 被測對象應該確切知道其協作者和依賴項。 如果您碰巧經常使用它,請確保您確實在生成簡單,干凈且可讀的代碼。

例子:

Foo foo = mock(Foo.class, withSettings().extraInterfaces(Bar.class, Baz.class));//now, the mock implements extra interfaces, so following casting is possible:Bar bar = (Bar) foo;Baz baz = (Baz) foo;

參數:

interfaces –應該實現的額外接口。

返回:設置實例,以便您可以流暢地指定其他設置
現在讓我們看一下測試:

PlayerServiceImplTest.java

package com.blogspot.toomuchcoding.service;import com.blogspot.toomuchcoding.factory.PlayerFactory; import com.blogspot.toomuchcoding.model.*; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.invocation.InvocationOnMock; import org.mockito.runners.MockitoJUnitRunner; import org.mockito.stubbing.Answer;import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.mockito.BDDMockito.*;/*** User: mgrzejszczak* Date: 08.06.13* Time: 19:26*/ @RunWith(MockitoJUnitRunner.class) public class PlayerServiceImplTest {@MockPlayerFactory playerFactory;@InjectMocksPlayerServiceImpl objectUnderTest;@Mock(extraInterfaces = {DJ.class, JavaDeveloper.class})DefensivePlayer defensivePlayerWithDjAndJavaDevSkills;@MockDefensivePlayer defensivePlayer;@MockOffensivePlayer offensivePlayer;@MockPlayer commonPlayer;@Testpublic void shouldReturnOffensivePlayerThatRan() throws Exception {//givengiven(playerFactory.createPlayer(PositionType.ATT)).willReturn(offensivePlayer);//whenPlayer createdPlayer = objectUnderTest.playAGameWithAPlayerOfPosition(PositionType.ATT);//thenassertThat(createdPlayer == offensivePlayer, is(true));verify(offensivePlayer).run();}@Testpublic void shouldReturnDefensivePlayerButHeWontBeADjNorAJavaDev() throws Exception {//givengiven(playerFactory.createPlayer(PositionType.GK)).willReturn(defensivePlayer);//whenPlayer createdPlayer = objectUnderTest.playAGameWithAPlayerOfPosition(PositionType.GK);//thenassertThat(createdPlayer == defensivePlayer, is(true));verify(defensivePlayer).run();verify(defensivePlayer).defend();verifyNoMoreInteractions(defensivePlayer);}@Testpublic void shouldReturnDefensivePlayerBeingADjAndAJavaDev() throws Exception {//givengiven(playerFactory.createPlayer(PositionType.GK)).willReturn(defensivePlayerWithDjAndJavaDevSkills);doAnswer(new Answer<Object>() {@Overridepublic Object answer(InvocationOnMock invocationOnMock) throws Throwable {System.out.println("Hit me baby one more time!");return null;}}).when(((DJ) defensivePlayerWithDjAndJavaDevSkills)).playSomeMusic();doAnswer(new Answer<Object>() {@Overridepublic Object answer(InvocationOnMock invocationOnMock) throws Throwable {System.out.println("public static void main(String... args){\n}");return null;}}).when(((JavaDeveloper) defensivePlayerWithDjAndJavaDevSkills)).doSomeSeriousCoding();//whenPlayer createdPlayer = objectUnderTest.playAGameWithAPlayerOfPosition(PositionType.GK);//thenassertThat(createdPlayer == defensivePlayerWithDjAndJavaDevSkills, is(true));verify(defensivePlayerWithDjAndJavaDevSkills).run();verify(defensivePlayerWithDjAndJavaDevSkills).defend();verify((DJ) defensivePlayerWithDjAndJavaDevSkills).playSomeMusic();verify((JavaDeveloper) defensivePlayerWithDjAndJavaDevSkills).doSomeSeriousCoding();}@Testpublic void shouldReturnDefensivePlayerBeingADjAndAJavaDevByUsingWithSettings() throws Exception {//givenDefensivePlayer defensivePlayerWithDjAndJavaDevSkills = mock(DefensivePlayer.class, withSettings().extraInterfaces(DJ.class, JavaDeveloper.class));given(playerFactory.createPlayer(PositionType.GK)).willReturn(defensivePlayerWithDjAndJavaDevSkills);doAnswer(new Answer<Object>() {@Overridepublic Object answer(InvocationOnMock invocationOnMock) throws Throwable {System.out.println("Hit me baby one more time!");return null;}}).when(((DJ) defensivePlayerWithDjAndJavaDevSkills)).playSomeMusic();doAnswer(new Answer<Object>() {@Overridepublic Object answer(InvocationOnMock invocationOnMock) throws Throwable {System.out.println("public static void main(String... args){\n}");return null;}}).when(((JavaDeveloper) defensivePlayerWithDjAndJavaDevSkills)).doSomeSeriousCoding();//whenPlayer createdPlayer = objectUnderTest.playAGameWithAPlayerOfPosition(PositionType.GK);//thenassertThat(createdPlayer == defensivePlayerWithDjAndJavaDevSkills, is(true));verify(defensivePlayerWithDjAndJavaDevSkills).run();verify(defensivePlayerWithDjAndJavaDevSkills).defend();verify((DJ) defensivePlayerWithDjAndJavaDevSkills).playSomeMusic();verify((JavaDeveloper) defensivePlayerWithDjAndJavaDevSkills).doSomeSeriousCoding();}@Testpublic void shouldReturnCommonPlayer() throws Exception {//givengiven(playerFactory.createPlayer(null)).willReturn(commonPlayer);//whenPlayer createdPlayer = objectUnderTest.playAGameWithAPlayerOfPosition(null);//thenassertThat(createdPlayer, is(commonPlayer));} }

這里有很多測試,所以讓我們看一下最有趣的測試。 但是在開始之前,我們先:提供@RunWith(MockitoJUnitRunner.class)批注,這使我們能夠使用Mockito批注,例如@Mock和@InjectMocks 。

說到哪個@Mock注釋會創建一個Mock,而@InjectMocks則通過構造函數或setter注入所有模擬(這太棒了嗎?)。

對于防御性玩家,我們使用注記extraInterfaces的extra元素,該元素為給定的Mock提供其他接口。 您還可以編寫(可以在shouldReturnDefensivePlayerBeingADjAndAJavaDevByUsingWithSettings測試中找到的內容 ):

DefensivePlayer defensivePlayerWithDjAndJavaDevSkills = mock(DefensivePlayer.class, withSettings().extraInterfaces(DJ.class, JavaDeveloper.class));

讓我們仔細看看為與DefensivePlayer相關的功能和測試功能的轉換部分編寫的測試:

@Testpublic void shouldReturnDefensivePlayerBeingADjAndAJavaDev() throws Exception {//givengiven(playerFactory.createPlayer(PositionType.GK)).willReturn(defensivePlayerWithDjAndJavaDevSkills);doAnswer(new Answer<Object>() {@Overridepublic Object answer(InvocationOnMock invocationOnMock) throws Throwable {System.out.println("Hit me baby one more time!");return null;}}).when(((DJ) defensivePlayerWithDjAndJavaDevSkills)).playSomeMusic();doAnswer(new Answer<Object>() {@Overridepublic Object answer(InvocationOnMock invocationOnMock) throws Throwable {System.out.println("public static void main(String... args){\n}");return null;}}).when(((JavaDeveloper) defensivePlayerWithDjAndJavaDevSkills)).doSomeSeriousCoding();//whenPlayer createdPlayer = objectUnderTest.playAGameWithAPlayerOfPosition(PositionType.GK);//thenassertThat(createdPlayer == defensivePlayerWithDjAndJavaDevSkills, is(true));verify(defensivePlayerWithDjAndJavaDevSkills).run();verify(defensivePlayerWithDjAndJavaDevSkills).defend();verify((DJ) defensivePlayerWithDjAndJavaDevSkills).playSomeMusic();verify((JavaDeveloper) defensivePlayerWithDjAndJavaDevSkills).doSomeSeriousCoding();}

我們正在使用BDDMockito靜態方法,如給定(...)。willReturn(...)。willAnswer(...)等。然后,將空方法與自定義Anwsers結合使用。 在下一行中,您可以看到,為了存根另一個接口的方法,必須將模擬轉換為給定的接口。 這與驗證階段有關,在該階段,我不檢查是否已執行方法,您必須將模擬轉換為給定的接口。

您可以通過從工廠返回一個真實的實現來改進測試,或者如果創建一個繁瑣的操作,則可以返回這種實現的模擬。 我想在這里展示的是如何在Mockito中使用額外的接口(也許我的用例不是最好的用例)。 無論如何,測試中提出的實現都是不好的,所以我們應該考慮重構它的方法……

一種想法可能是,假設在Service中完成的附加邏輯是對象創建的一部分,將代碼原樣移至工廠:

PlayFactoryImplWithFieldSettingLogic.java

package com.blogspot.toomuchcoding.factory;import com.blogspot.toomuchcoding.adapter.CommonPlayerAdapter; import com.blogspot.toomuchcoding.adapter.DefencePlayerAdapter; import com.blogspot.toomuchcoding.adapter.OffensivePlayerAdapter; import com.blogspot.toomuchcoding.model.*;/*** User: mgrzejszczak* Date: 09.06.13* Time: 15:53*/public class PlayerFactoryImplWithFieldSettingLogic implements PlayerFactory {@Overridepublic Player createPlayer(PositionType positionType) {PlayerDetails player = createCommonPlayer(positionType);switch (positionType){case ATT:return createOffensivePlayer(player);case MID:return createOffensivePlayer(player);case DEF:return createDefensivePlayer(player);case GK:return createDefensivePlayer(player);default:return new CommonPlayerAdapter(player);}}private Player createDefensivePlayer(PlayerDetails player) {DefencePlayerAdapter defencePlayerAdapter = new DefencePlayerAdapter(player);defencePlayerAdapter.defend();defencePlayerAdapter.playSomeMusic();defencePlayerAdapter.doSomeSeriousCoding();return defencePlayerAdapter;}private OffensivePlayer createOffensivePlayer(PlayerDetails player) {OffensivePlayer offensivePlayer = new OffensivePlayerAdapter(player);offensivePlayer.shoot();return offensivePlayer;}private PlayerDetails createCommonPlayer(PositionType positionType){PlayerDetails playerDetails = new PlayerDetails();playerDetails.setPosition(positionType);return playerDetails;} }

這樣就沒有強制轉換代碼是干凈的。 現在,PlayerService如下所示:

PlayerServiceImplWIthoutUnnecessaryLogic.java

package com.blogspot.toomuchcoding.service;import com.blogspot.toomuchcoding.factory.PlayerFactory; import com.blogspot.toomuchcoding.model.*;/*** User: mgrzejszczak* Date: 08.06.13* Time: 19:02*/ public class PlayerServiceImplWithoutUnnecessaryLogic implements PlayerService {private PlayerFactory playerFactory;/*** What's the point in having this method then?* @param positionType* @return*/@Overridepublic Player playAGameWithAPlayerOfPosition(PositionType positionType) {return playerFactory.createPlayer(positionType);}public PlayerFactory getPlayerFactory() {return playerFactory;}public void setPlayerFactory(PlayerFactory playerFactory) {this.playerFactory = playerFactory;} }

隨之而來的問題是,您的代碼庫中是否甚至需要這種方法……

總結一下,我希望我能展示如何:

  • 使用MockitoJUnitRunner以干凈的方式注入模擬
  • 使用注釋或靜態方法添加可以由您的模擬使用的額外接口
  • 使用BDDMockito執行方法存根
  • 帶有自定義答案的存根無效方法
  • 附加接口的存根和驗證方法
  • 重構使用類強制轉換的代碼

來源可從TooMuchCoding Bitbucket存儲庫和TooMuchCoding Github存儲庫中獲得。

參考: Mockito –來自我們的JCG合作伙伴 Marcin Grzejszczak(位于Blog上)的 具有注釋和靜態方法的Extra Interfaces, 用于編碼癮君子博客。

翻譯自: https://www.javacodegeeks.com/2013/06/mockito-extra-interfaces-with-annotations-and-static-methods.html

mockito 靜態方法

總結

以上是生活随笔為你收集整理的mockito 静态方法_Mockito –带有注释和静态方法的额外接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲mv大片欧洲mv大片免费 | 麻豆影音先锋 | 久久视频一区二区 | 亚州日韩中文字幕 | 亚洲激情网站免费观看 | 亚洲精品1区2区3区 超碰成人网 | 欧美日韩天堂 | 亚洲美女免费精品视频在线观看 | 欧美一级日韩免费不卡 | 色天天综合网 | av理论电影 | 人人狠狠综合久久亚洲 | 欧美日韩精品在线视频 | 国产日韩中文字幕在线 | 亚洲一级片av | 国产成人精品一区二区三区在线 | 亚洲欧美日韩在线一区二区 | 国产不卡视频在线播放 | 免费在线观看一级片 | 91精品在线播放 | 久久久久99精品国产片 | 日韩免费在线观看视频 | 欧美国产大片 | 久久五月情影视 | 成人在线视频在线观看 | 久久亚洲综合国产精品99麻豆的功能介绍 | 国产乱对白刺激视频在线观看女王 | 碰碰影院 | 国产伦精品一区二区三区在线 | 国产在线永久 | 亚洲精品小视频 | av经典在线| 婷婷免费视频 | 国产原创91 | 国产亚洲成人精品 | 国产精品免费麻豆入口 | 欧美激情精品久久久久久免费 | 精品久久久久久久久久久久久久久久久久 | 精品综合久久 | 黄色成人在线 | 欧洲一区二区在线观看 | 97福利视频 | 中文字幕亚洲精品日韩 | 夜夜夜夜爽 | av在线中文 | 99久久日韩精品免费热麻豆美女 | 69精品视频在线观看 | 在线国产一区 | 国产成人一二三 | 亚洲国产高清视频 | 天天激情综合网 | 91精品国产自产在线观看永久 | 欧美在线观看视频免费 | 国产明星视频三级a三级点| 日本精品一区二区在线观看 | 久久综合狠狠综合 | 国产亚洲日本 | 伊人久久婷婷 | 粉嫩aⅴ一区二区三区 | 欧美激情第一区 | 国产精品久久三 | 日本久久免费电影 | 久久成人黄色 | 色视频在线免费 | 久久99久国产精品黄毛片入口 | 国产欧美综合视频 | 黄色国产在线 | 精品国产伦一区二区三区观看方式 | 69热国产视频 | 午夜国产一区二区三区四区 | 免费在线观看av | 日日草视频 | 人人插人人搞 | 99久久精品久久亚洲精品 | 国产精品永久久久久久久久久 | 色婷婷福利 | 国产精品理论片在线观看 | 亚洲精品一区中文字幕乱码 | 亚洲国产精品va在线看黑人动漫 | 日韩一区二区三区高清免费看看 | 国产精品美女久久久久久久久 | 亚洲精品国精品久久99热一 | 久久尤物电影视频在线观看 | 久草电影免费在线观看 | 国产亚洲欧美日韩高清 | 精品999久久久 | 精品久久久久久久久久久院品网 | 欧美精品在线视频观看 | 青草草在线视频 | av在线之家电影网站 | 狠狠干婷婷 | 黄色a在线观看 | 中文字幕丝袜 | 国产小视频在线观看免费 | 国产精品成人自拍 | av直接看| 天天射网站 | 玖草在线观看 | 五月婷婷综 | 久久久精品综合 | 久久99久久99精品 | 国产一级a毛片视频爆浆 | 日本高清免费中文字幕 | 97国产一区二区 | 色综合久久综合网 | 最新超碰在线 | 特级西西www44高清大胆图片 | 成人小电影在线看 | 人人澡人人爱 | 三级黄色理论片 | 久久久久综合 | 91自拍视频在线 | 婷婷av综合 | 国产欧美在线一区 | 玖玖视频免费在线 | 超碰在线日韩 | 午夜av网站| 精品国产乱子伦一区二区 | 毛片在线网 | 亚洲一区免费在线 | 激情五月激情综合网 | 久久久国产精华液 | 国产小视频在线播放 | 中文字幕一区在线观看视频 | 午夜色影院 | 国产精品情侣视频 | 久久婷婷激情 | 一级黄色电影网站 | 亚洲欧美在线综合 | 日本一区二区三区视频在线播放 | 久久九九国产精品 | 欧美成人a在线 | 亚洲在线高清 | 国产一区欧美一区 | 久久天堂影院 | 爱情影院aqdy鲁丝片二区 | 国产精品成 | 91一区二区三区久久久久国产乱 | 亚洲国产mv | 欧美国产精品久久久久久免费 | 69精品视频| 欧美性极品xxxx做受 | 欧美成年人在线视频 | 久久久国产一区二区三区 | 91成人网在线播放 | 欧美精品一区二区免费 | 欧美一区免费观看 | 国产黄色网| 天天操天天添天天吹 | 国产精品第52页 | 视频91在线 | 97免费在线观看视频 | 欧美精品久久久久久 | 美女性爽视频国产免费app | 国产精品理论片在线播放 | 激情影院在线 | 深夜福利视频一区二区 | 成人免费视频观看 | 成人久久毛片 | 日本久久视频 | 91九色综合 | 日韩福利在线观看 | 亚洲天堂精品视频 | 最新精品国产 | 91视视频在线直接观看在线看网页在线看 | 五月婷综合网 | 啪啪小视频网站 | 亚洲精品视频免费在线 | 久久怡红院 | 国产91精品一区二区麻豆亚洲 | 欧美在线观看视频免费 | 黄色www免费 | 日韩理论电影网 | 亚洲波多野结衣 | 国产成人在线网站 | 国产精品欧美久久久久天天影视 | 久碰视频在线观看 | 久久久久久久久久免费视频 | 精品国产一区二区三区噜噜噜 | 激情五月在线观看 | 日韩免费电影网 | 综合色久 | 久久久免费av| 狠狠干电影 | 人人看人人草 | 亚洲最新av在线网站 | 免费在线视频一区二区 | 有码中文字幕 | 国产精品视频免费在线观看 | 亚洲国产精品久久久久婷婷884 | 国产免费av一区二区三区 | 精品不卡av| 亚洲综合视频在线 | 欧美精品小视频 | 久久蜜臀一区二区三区av | 人人澡人人爽欧一区 | 天天操夜夜曰 | 成人午夜电影在线播放 | 欧美电影在线观看 | 国产精品色婷婷 | 欧美午夜剧场 | 欧美日韩亚洲精品在线 | 天堂中文在线播放 | 久久欧美在线电影 | 一本之道乱码区 | 最近最新中文字幕视频 | 一区二区三区在线免费播放 | 精品综合久久 | 免费在线观看av的网站 | 日韩精品一区二区三区不卡 | 黄色av观看 | 精精国产xxxx视频在线播放 | 欧美va天堂va视频va在线 | 狠狠干五月天 | 国产精品久久久久久吹潮天美传媒 | 不卡电影一区二区三区 | 国产69精品久久久久久 | 欧美黑吊大战白妞欧美 | 婷婷丁香六月天 | 国产精品久久久久久久久久久久久久 | 日韩一区二区三区高清在线观看 | 亚洲欧美日韩精品久久久 | 在线观看视频日韩 | 国内免费久久久久久久久久久 | 久久免费福利视频 | 成人精品久久 | 国产97色| 成人免费大片黄在线播放 | 久久精品视频日本 | 国产精彩在线视频 | 欧美精品日韩 | 99视频精品 | av手机版 | 国产一区二区三区免费在线 | 免费网站v| 91人人网 | 超碰人人99 | 国产在线观看黄 | 国产成人精品久久久久 | a在线免费观看视频 | 午夜精品久久久久久久99无限制 | 日韩久久久久久久久久久久 | 色婷婷午夜 | 在线免费视频 你懂得 | а天堂中文最新一区二区三区 | 欧美日韩中文视频 | 国产无限资源在线观看 | 一级特黄aaa大片在线观看 | 精品久久久久久亚洲综合网站 | 国产成人精品一区二区三区在线观看 | 在线日韩视频 | 综合天堂av久久久久久久 | 伊人久久av | 亚洲精品视频在线观看免费视频 | 久草久热| 五月婷网 | 久久在线视频在线 | 日韩精品大片 | 午夜精品一区二区三区可下载 | 国产成人精品一区二区在线 | 玖玖玖影院 | 在线v片免费观看视频 | 免费毛片一区二区三区久久久 | 久久国产精品一二三区 | 中文字幕有码在线播放 | 麻豆国产网站入口 | 香蕉视频在线免费 | 精品国产精品一区二区夜夜嗨 | 久久久久女教师免费一区 | 蜜桃视频日本 | 亚洲人成人在线 | 久久视频精品在线观看 | 久久成人精品电影 | 精品久久美女 | 成人三级视频 | 91在线视频| 久久久精品国产免费观看一区二区 | 国产精品久久久久久a | 97精品在线视频 | 婷婷在线资源 | 黄色电影小说 | 欧美午夜激情网 | 99激情网 | 高清久久久 | 久久五月婷婷丁香社区 | 国产精品一区二区三区99 | 国产福利精品视频 | 日本在线观看中文字幕无线观看 | 国产精品美女久久久久久久网站 | 在线观看一区视频 | 美女视频永久黄网站免费观看国产 | 在线视频日韩精品 | 久久久国产一区 | 狠狠88综合久久久久综合网 | 中文一区在线观看 | 久久99久久99精品免观看软件 | 国产成人精品免费在线观看 | 久久亚洲综合国产精品99麻豆的功能介绍 | 久久精品视频免费 | 国产精品自在线拍国产 | 成人免费在线视频 | 久久婷五月 | 欧美一级黄大片 | 97成人在线视频 | 久久福利国产 | 91毛片在线观看 | 国产理论片在线观看 | 久久久久久久久免费 | 欧美,日韩| 国内视频1区 | 国产91在线免费视频 | 福利视频在线看 | 又黄又刺激视频 | 在线观看激情av | 2022国产精品视频 | 91在线www | 久久超碰免费 | 久久视频一区二区 | 麻豆国产精品va在线观看不卡 | 91视频在线观看大全 | 欧美孕妇视频 | 中文字幕精品三级久久久 | 欧美老女人xx | 99久久综合狠狠综合久久 | 91日韩在线专区 | 中文字幕乱码亚洲精品一区 | 日韩高清一二区 | 欧美日韩免费观看一区二区三区 | 91网址在线 | 欧美日韩精品网站 | 国产尤物一区二区三区 | 91看片在线 | 99综合视频 | 日韩精品久久久免费观看夜色 | 91c网站色版视频 | 特黄特色特刺激视频免费播放 | 国产精品久久久久久久免费观看 | 成人av亚洲 | 中文字幕国语官网在线视频 | 国产亚洲精品久久久久动 | 亚洲一区二区精品视频 | 久久字幕网 | 久黄色| 九九在线播放 | 日本久久成人中文字幕电影 | 国产精品嫩草影院9 | 国产精品福利无圣光在线一区 | 青青河边草免费观看完整版高清 | 91爱在线| 国产免费三级在线观看 | 69中文字幕 | 国产中文字幕网 | 99这里只有精品99 | 97超碰免费在线观看 | 成人在线电影观看 | 免费观看丰满少妇做爰 | 西西大胆免费视频 | 午夜免费久久看 | 色噜噜狠狠色综合中国 | 99久久精品国产观看 | 日韩免费在线观看视频 | 91豆花在线 | 精品国产免费久久 | 91高清视频免费 | 人人爱人人舔 | 欧美国产精品久久久久久免费 | 成人wwwxxx视频| www操操| www.午夜| 免费av在线网站 | 久久久久久久福利 | 久草av在线播放 | 久久激情五月丁香伊人 | 日韩成人精品一区二区 | 天天色综合久久 | 国产精品一区专区欧美日韩 | 欧美电影在线观看 | 天天操天天操一操 | 日韩网站一区二区 | 美州a亚洲一视本频v色道 | 成人动图 | 午夜精品999 | 国产精品国内免费一区二区三区 | 伊人婷婷激情 | 午夜精品久久久99热福利 | 成人小视频在线观看免费 | 91女神的呻吟细腰翘臀美女 | 色综合网在线 | 精品国产视频在线 | 天天操天天舔天天爽 | 中文字幕在线观看国产 | 日韩av看片 | 欧美精品九九99久久 | 日韩在线网 | 亚洲精欧美一区二区精品 | 日韩国产精品一区 | 毛片随便看 | 免费看的黄色录像 | 久久草精品 | 精品亚洲二区 | 国产手机在线视频 | 在线观看免费91 | 日韩网站在线观看 | 国产成人三级在线观看 | 日韩理论电影网 | 99精品视频在线看 | 久久久久看片 | ,午夜性刺激免费看视频 | 天天干夜夜爱 | 国产中文字幕在线看 | 色九九在线 | 久久国产精品精品国产色婷婷 | 开心色婷婷| 黄色高清视频在线观看 | 五月婷婷狠狠 | 久久99热精品这里久久精品 | 91久久精品一区二区二区 | 免费亚洲视频在线观看 | 免费在线观看成人av | 500部大龄熟乱视频使用方法 | 99久久久国产精品 | av网站地址 | 成人禁用看黄a在线 | 天天干天天操天天做 | 麻花天美星空视频 | 日韩欧美国产精品 | 国产成人高清av | 中文字幕一区二区三区乱码在线 | 亚洲男模gay裸体gay | 色久天| 人人干在线 | 狠狠躁日日躁狂躁夜夜躁 | 日本三级不卡 | 欧美午夜久久久 | av蜜桃在线 | 欧洲视频一区 | 日韩成人中文字幕 | 看毛片的网址 | 亚洲精品美女在线 | 日韩超碰 | 成人小视频在线播放 | 99精品免费视频 | 国产视频欧美视频 | 亚洲精品视频在线看 | 国产美女网站在线观看 | av免费看电影 | 天天插天天 | 国产护士在线 | 成人黄色资源 | 日本在线观看视频一区 | 麻豆首页 | 97色综合| 嫩草av在线 | 色香蕉在线视频 | 国产麻豆精品一区二区 | 国产视频精品免费 | 字幕网资源站中文字幕 | 国产剧情在线一区 | 日韩精品在线播放 | 久久艹精品 | 国产69精品久久app免费版 | 久久亚洲欧美日韩精品专区 | 五月婷婷色丁香 | 99精品偷拍视频一区二区三区 | 96精品视频 | 国产91探花 | 首页国产精品 | 色偷偷男人的天堂av | 日韩av伦理片 | 日韩av三区 | 亚洲五月花 | 91精品在线观看视频 | 最新国产在线 | 久久久国产影院 | 五月天激情婷婷 | 在线视频a| 国产精品久久久久久久久久三级 | 中文字幕91在线 | 久久精品视频在线播放 | 久久国产电影院 | 日韩精品一区二区三区第95 | 波多野结衣一区三区 | 成人午夜免费福利 | 91av视频在线免费观看 | 色天天综合久久久久综合片 | 久久久精品小视频 | 伊人天天狠天天添日日拍 | 国产在线观看你懂的 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 国产视频日韩视频欧美视频 | 国产精品久久久久影视 | 日韩18p| 亚洲最新视频在线播放 | 成人av观看| 91九色网站 | 精品夜夜嗨av一区二区三区 | 在线观看国产永久免费视频 | 亚洲乱码在线观看 | 人人澡澡人人 | 女人久久久久 | 亚洲三级av | 黄免费在线观看 | 一区二区视频在线播放 | 综合网av| 久久精品高清视频 | 成人av日韩 | 在线观看你懂的网址 | 国产高清黄色 | 人人看人人爱 | av成人在线看 | 欧美精品久久久久久久久久丰满 | 国产精品欧美激情在线观看 | 在线视频免费观看 | 一区二区三区韩国免费中文网站 | 日韩日韩日韩日韩 | 国产日产精品一区二区三区四区的观看方式 | 免费av试看 | 综合激情网... | 97香蕉超级碰碰久久免费软件 | 国产二区视频在线观看 | 国产精品久久久电影 | 激情喷水| 在线观看国产一区二区 | 粉嫩av一区二区三区四区 | 欧美精品在线观看免费 | 天天干一干 | 天天干天天干天天射 | 综合久久网站 | 国产精品欧美激情在线观看 | 视频在线观看日韩 | 成人禁用看黄a在线 | 日韩欧美高清一区二区 | 国产一区二区三区高清播放 | 色婷婷国产精品 | 久草剧场 | 中文字幕av在线 | 五月激情av| 久久久久久久久久影院 | 99精品福利 | 婷婷激情小说网 | 国产永久免费观看 | 手机av电影在线 | 国产在线传媒 | 中文字幕在线看视频国产 | 久久免费视频8 | 亚洲精品国产精品国自产观看 | 色综合激情久久 | 久久视频99 | 激情久久伊人 | 欧美激情综合五月色丁香 | 久久久久久久久影院 | 五月天色丁香 | 日韩av成人在线观看 | 久久99免费观看 | 亚洲综合狠狠干 | 在线观看中文字幕一区 | 午夜影院一级片 | 国产麻豆精品一区 | 久久精品免费 | 91九色pron| 2019精品手机国产品在线 | 国产在线欧美 | 国产人成精品一区二区三 | 黄色av成人在线观看 | 日本中文字幕影院 | 在线不卡a | 久久精精品| 日韩av进入| 草久久av | 人人舔人人干 | 久久久久久久18 | 91av电影在线 | 人人澡人 | 国产精品一区二区久久精品爱涩 | 99爱爱| 欧美作爱视频 | 亚洲精品av中文字幕在线在线 | 黄色网址国产 | 91亚洲网站| 色999精品 | 天天干天天搞天天射 | 激情av一区二区 | 欧美一二三视频 | 欧美激情奇米色 | 黄色成人在线观看 | 日韩黄色中文字幕 | 天堂在线视频中文网 | 亚洲精品女人久久久 | 欧美日韩高清一区二区 | 婷婷视频在线观看 | 四虎www.| 色偷偷网站视频 | 一个色综合网站 | 精品国产免费av | 一级全黄毛片 | 国产精品免费高清 | 中文字幕在线视频第一页 | 色视频在线 | 国产精品女人网站 | 国产精品久久久久久影院 | 在线观看日本韩国电影 | 成人午夜黄色影院 | 美女视频一区二区 | 欧美极品一区二区三区 | 97理论片 | 国产69久久久欧美一级 | 不卡视频在线看 | 日韩欧美在线中文字幕 | 日韩av一区在线观看 | 久草在线观看视频免费 | 色综合久久66 | 国产精品www | 中文字幕在线视频网站 | 中文字幕在线观看免费高清电影 | 激情网婷婷| 91视频电影 | 99久久精品免费看国产麻豆 | 欧美片一区二区三区 | 国产成人精品在线 | 久久不卡免费视频 | 黄色看片| 免费a网址 | 久久久久久久网站 | 国产福利一区二区在线 | 亚洲在线综合 | 91桃色国产在线播放 | 五月天久久精品 | 久久免费福利 | 久久精品美女 | 国产视频99 | 亚洲视频99 | 日韩欧美精品一区二区三区经典 | 国产96av| 最新真实国产在线视频 | 99视频偷窥在线精品国自产拍 | 婷婷六月天在线 | 久草在线免费播放 | 欧美日韩综合在线观看 | 主播av在线 | 精品久久一区二区三区 | 人人干人人干人人干 | 亚洲免费成人 | 人人澡人人澡人人 | 国产操在线| 亚洲精品资源 | 亚洲国产精品激情在线观看 | 日本精品在线视频 | 成年人视频在线免费观看 | 免费色av | 911国产精品| 中文在线免费观看 | 91精品视频在线播放 | 成人超碰在线 | 91麻豆国产福利在线观看 | 天天干,天天操 | 97视频人人澡人人爽 | 欧美a级免费视频 | av成人免费观看 | 久久精品老司机 | 欧美性黑人 | 精品一区二区在线播放 | 国产欧美在线一区二区三区 | 美女在线国产 | 国内精品在线观看视频 | 日日夜夜精品 | 中文字幕91| 色多视频在线观看 | 久草在线免费色站 | 美女国产精品 | 成年人在线 | 精品久久一二三区 | 久久久精品网站 | 九九九在线观看 | 精品一区精品二区高清 | 99视频精品免费观看, | a天堂中文在线 | 久久久www| 蜜臀久久99精品久久久无需会员 | 久久久精品国产一区二区电影四季 | 成人91在线观看 | 亚洲成av人片 | 一级成人免费 | 久久午夜精品视频 | 美女视频黄是免费的 | 久久国产美女 | 久草网首页| 久久99久久99久久 | 天天射天天做 | 日韩免费视频一区二区 | 在线观看视频亚洲 | 欧美日韩不卡在线 | 黄色一级在线视频 | 国产五月婷婷 | 日日日网| www日韩在线 | 久久精品首页 | 最新久久免费视频 | 久久精品国产成人精品 | 六月丁香婷 | 天天综合在线观看 | 久久久精品亚洲 | 国产亚洲人成网站在线观看 | 91热在线 | 国产第一福利 | 99综合电影在线视频 | 色多多污污在线观看 | 色婷婷av一区 | 亚洲天天干| 国产精品毛片久久久久久 | 深爱激情综合 | 91精品老司机久久一区啪 | 少妇搡bbb| 日韩av影片在线观看 | 久久综合影视 | 日韩精品免费一区二区三区 | 国产精品69久久久久 | 在线a人v观看视频 | 在线岛国av | 免费在线观看黄网站 | 日韩在线观看你懂得 | 国产999精品久久久久久绿帽 | 成人一级电影在线观看 | 免费观看一级视频 | 亚洲国产高清在线观看视频 | 久久视频精品在线观看 | 国产精品国产三级国产专区53 | 国产精品久久精品 | 丁香婷婷电影 | 日本中文字幕在线视频 | 日韩av在线一区二区 | 免费色视频网站 | v片在线播放 | 欧美日韩不卡在线视频 | 国产aaa免费视频 | 综合激情网... | 色视频一区 | 国产精品久久久久永久免费 | 国产青春久久久国产毛片 | 国产专区视频在线观看 | av黄色免费看 | 五月激情姐姐 | 黄色小网站在线观看 | 69国产精品视频 | 91亚色视频在线观看 | 91亚州 | 国产亚洲精品免费 | 免费网址在线播放 | 色网站中文字幕 | 六月丁香激情综合色啪小说 | 激情综合色播五月 | 日本精品在线看 | 丁香五月网久久综合 | 超碰九九 | av大全在线观看 | 久久人人爽人人 | 91久久精品一区二区二区 | 久久婷婷开心 | 国产精品资源 | 国产亚洲精品av | 久久精品欧美 | 日韩在线中文字幕 | 国产在线a不卡 | 日韩二三区 | 免费看一级特黄a大片 | 精品国产成人在线 | 亚洲精品资源在线观看 | 91视频在线国产 | 国产一区二区在线免费 | 欧美精品二区 | 日韩在线免费视频观看 | 狠狠躁天天躁 | www.日本色 | 97av在线 | 超碰最新网址 | 欧美日韩在线观看一区二区三区 | 亚洲免费在线观看视频 | 亚洲一区二区黄色 | 中文字幕在线免费看线人 | 五月花激情 | 久久午夜精品视频 | 亚洲精品看片 | 91免费国产在线观看 | 成人免费一级 | 午夜精品久久久久久 | 亚洲精品字幕在线 | 日韩在线播放视频 | 国产玖玖在线 | 日韩av在线一区二区 | 欧美少妇bbwhd | 天天色天天操天天爽 | 人人狠 | 国内毛片毛片 | x99av成人免费 | 最新国产福利 | 午夜精品久久一牛影视 | 日韩1级片 | 亚洲精品电影在线 | www免费网站在线观看 | 国产不卡免费av | 日韩欧美精品在线观看视频 | 黄色网www | 人人插人人草 | 狠狠狠狠狠狠天天爱 | 日韩精品电影在线播放 | 在线视频黄 | 国产资源在线观看 | 国产精品一区二区免费 | 亚洲国产精品va在线看黑人 | 免费日韩电影 | 国产在线欧美在线 | 97精品国产91久久久久久 | 久久久久亚洲天堂 | 欧美精品久久久久久久久老牛影院 | 婷婷亚洲综合五月天小说 | av不卡中文字幕 | www好男人| 久草在线观看视频免费 | 大荫蒂欧美视频另类xxxx | 天堂网av在线 | 97成人在线观看 | 中文字幕av网站 | 黄色福利视频网站 | 91在线精品视频 | 成人蜜桃网| 狠狠色噜噜狠狠狠合久 | 综合天天色| 国产精品一区二区无线 | 操久在线 | 欧美在线1 | 一区二区欧美在线观看 | 超级碰碰碰免费视频 | 在线精品亚洲 | 永久精品视频 | 久久香蕉电影网 | 久久国产美女 | 玖玖在线观看视频 | 欧美成人999| 国产精品第一页在线 | 日韩av视屏在线观看 | 超碰国产97 | 97国产小视频 | h视频日本 | 9在线观看免费高清完整版 玖玖爱免费视频 | 久久久资源网 | 最近免费观看的电影完整版 | 久久黄色网页 | 在线免费看片 | 五月天激情综合 | 日韩av电影一区 | 成人羞羞视频在线观看免费 | 麻豆国产精品一区二区三区 | 三级黄色理论片 | 麻豆mv在线观看 | 国产91国语对白在线 | 国产视频手机在线 | 综合网欧美 | 欧美精品久久久久久久久久 | 久热超碰| 成人午夜剧场在线观看 | 国产一区二区在线视频观看 | 亚洲精品乱码久久久久久久久久 | 精品国产成人在线影院 | 四虎在线观看精品视频 | 久久精品综合视频 | 麻豆一精品传二传媒短视频 | 国产精品福利午夜在线观看 | 久亚洲精品| 国产精品第54页 | 日日骑| 五月婷婷丁香 | 伊人午夜视频 | 中文字幕一区二区三区四区在线视频 | 91热精品 | a视频在线看 | 国产在线播放一区 | 国产一区成人在线 | 久久久久久久久毛片精品 | 最新日韩中文字幕 | 一本一道久久a久久综合蜜桃 | 99热国内精品 | 久久天天操 | 在线精品亚洲一区二区 | 免费无遮挡动漫网站 | 久久久久久久久综合 | 久久综合爱 | www国产亚洲精品久久麻豆 | 狠狠干激情 | 久久精品视频2 | 午夜精品久久久久久久99无限制 | 精品v亚洲v欧美v高清v | 中文字幕在线国产 | 日韩免费小视频 | 在线观看中文字幕网站 | 91精品国产99久久久久久久 | 97在线视频观看 | 天天射天天干天天 | 日韩免费在线一区 | 成 人 黄 色视频免费播放 | 国产一二区精品 | 在线 成人 | 久久精品视频日本 | 久久精品国亚洲 | 亚洲精品国精品久久99热一 | 超碰97公开 | 国产日产欧美在线观看 | 天天亚洲| 成人黄色片免费看 | 欧美精品九九 | 亚洲精品电影在线 | 91在线播放综合 | 999久久 | 成人黄色在线电影 | 中文国产成人精品久久一 | www.色的| 久久黄色网页 | 黄色电影网站在线观看 | 中文字幕在线播放第一页 | 国产免费一区二区三区最新6 | 亚洲视频,欧洲视频 | 久久久精品99 | 久久婷婷五月综合色丁香 | 99草在线视频 | 欧美激精品 | 中文字幕传媒 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 天天综合狠狠精品 | 免费视频一区二区 | av在线直接看 | 久久久精品久久日韩一区综合 | 亚州性色| 嫩草av影院 | 超碰97av在线| 国产午夜精品久久久久久久久久 | 97av在线 | 欧美日韩精品区 | 久久夜夜夜 | 91传媒91久久久 | 精品在线观看一区二区三区 | 在线观看国产亚洲 | 色婷婷成人网 | 成年人视频在线免费 | 香蕉视频18 | 在线电影91 | 国产精品免费久久 | 国产精品免费久久久久 | 亚洲综合色播 | 国产视频在线观看一区二区 | 99视| 欧美日韩亚洲在线观看 | 国产日产在线观看 | 91av短视频 | 最新国产福利 | 久久99热国产 | 三上悠亚一区二区在线观看 | 婷婷精品 | 午夜婷婷在线观看 | 热久在线 | 久久精品国产免费观看 | 黄色小说网站在线 | 午夜精品久久久久久久99水蜜桃 | 色婷婷狠狠干 | 免费一级特黄录像 | 日韩欧美视频在线免费观看 | 在线观看日韩av | 亚洲第一中文字幕 | 成人免费视频播放 | 99久视频| 中文字幕一区在线观看视频 | 日韩精品免费在线 | 色福利网站 | 2019中文| 99久久精品免费看国产麻豆 | 嫩草av影院 | 国产精品美女久久久久aⅴ 干干夜夜 | 国产精品美女久久久久久久 | 国产精品麻豆一区二区三区 | 亚洲高清网站 | 毛片.com| 成人日批视频 | 久久久久免费看 | 亚洲欧美一区二区三区孕妇写真 | 欧美色伊人 | 超碰公开在线 | 日本激情视频中文字幕 | 国产精品一区二区在线观看 | 人人爽人人爽人人片 | 欧美激情综合五月色丁香 | 天天操天天射天天插 | 午夜精品一二三区 | 亚洲人成精品久久久久 | 日韩色在线观看 | 日本免费久久高清视频 | 91九色精品国产 | 美腿丝袜av | 综合久久网站 | 日韩高清精品免费观看 | 久久久久久看片 | 人人干,人人爽 |