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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Mockito

發布時間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mockito 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mockito

本文整理自 B站 UP主 心藍說Java 汪文君Mockito實戰視頻筆記

introduction

Mockito is a mocking framework that tastes really good. It lets you write beautiful tests with a clean & simple API. Mockito doesn’t give you hangover because the tests are very readable and they produce clean verification errors. Read more about features & motivations.

significance of mockito

Automated tests are a safety net. They run and notify if the system is broken so that the offending code can be fixed very quickly. If a test suite runs for an hour, the purpose of quick feedback is compromised.

The following are example s of testing-unfriendly behaviors:

  • Accquiring a database connection and fetching/updating data
  • Connecting to the Internet and downloading files
  • Interacting with an SMTP server to send an e-mail
  • Looking up JNDI (Java Naming and Directory Interface])
  • Invoking a web service
  • Performing I/O operations, such as printing a report

Mockito plays a key role in mocking external dependencies.

1.**how to mock **

  • @RunWith(MockitoJUnitRunner.class)
@RunWith(MockitoJUnitRunner.class) public class AccountLoginControllerTest {private AccountDao accountDao;private HttpServletRequest request;private AccountLoginController controller;@Beforepublic void setUp() {this.accountDao = Mockito.mock(AccountDao.class);this.request = Mockito.mock(HttpServletRequest.class);this.controller = new AccountLoginController(accountDao);}@Testpublic void testLoginSuccess() {Account account = new Account();Mockito.when(request.getParameter("username")).thenReturn("alex");Mockito.when(request.getParameter("password")).thenReturn("123456");Mockito.when(accountDao.findAccount(anyString(), anyString())).thenReturn(account);assertThat(controller.login(request), equalTo("index.jsp"));}@Testpublic void testLoginFailure() {Mockito.when(accountDao.findAccount(anyString(), anyString())).thenReturn(null);assertThat(controller.login(request), equalTo("/login"));}@Testpublic void testLogin505() {Mockito.when(accountDao.findAccount(anyString(), anyString())).thenThrow(UnsupportedOperationException.class);assertThat(controller.login(request), equalTo("505"));} }
  • MockitoAnnotations.initMocks(this) and @Mock

    public class AccountControllerTest {private AccountLoginController controller;private AccountDao accountDao;@Mockprivate HttpServletRequest request;@Beforepublic void setUp(){MockitoAnnotations.initMocks(this);accountDao = Mockito.mock(AccountDao.class);controller = new AccountLoginController(accountDao);}@Testpublic void testLoginSuccess(){Mockito.when(accountDao.findAccount(anyString(), anyString())).thenReturn(new Account());assertThat(controller.login(request), equalTo("index.jsp"));} }
  • MockitoRule mockRule = MockitoJUnit.rule()

    public class AccountControllerMockByRuleTest {@Rulepublic MockitoRule mockitoRule = MockitoJUnit.rule();@Mock(answer = Answers.RETURNS_SMART_NULLS)private AccountDao accountDao;@Testpublic void testLogin(){Account account = accountDao.findAccount(anyString(), anyString());assertNotNull(account);} }
  • mock 方法內部類

    public class DeepMockOrderServiceTest {@Mockprivate Order order;@Mock(answer = Answers.RETURNS_DEEP_STUBS)private OrderService service;@Beforepublic void setUp() {MockitoAnnotations.initMocks(this);}@Testpublic void testOrderService(){ // Mockito.when(service.getOrder()).thenReturn(order); // order.foo();service.getOrder().foo();} }

2.how to stubbing

  • stubbing void method
  • stubbing method with exception
  • stubbing consecutive calls(iterator-style-stubbing)
  • stubbing with callbacks
  • stubbing with real call
import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner;import java.util.ArrayList; import java.util.List;import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; import static org.mockito.Mockito.*;@RunWith(MockitoJUnitRunner.class) public class StubbingTest {private List<String> list;@Beforepublic void init(){this.list = mock(ArrayList.class);}/*** when ... Then ...*/@Testpublic void howToUseStubbing(){when(list.get(0)).thenReturn("first");assertThat(list.get(0), equalTo("first"));when(list.get(anyInt())).thenThrow(new RuntimeException());try {list.get(0);fail();}catch (Exception e){assertThat(e, instanceOf(RuntimeException.class));}}/*** 測試無返回值的方法*/@Testpublic void howToStubbingVoidMethod(){doNothing().when(list).clear();list.clear();// 驗證執行次數verify(list, times(1)).clear();// 拋出異常doThrow(RuntimeException.class).when(list).clear();try {list.clear();fail();}catch (Exception e){assertThat(e, instanceOf(RuntimeException.class));}}/*** 測試有返回值的方法*/@Testpublic void stubbingDoReturn(){when(list.get(0)).thenReturn("first");doReturn("second").when(list).get(1);assertThat(list.get(0), equalTo("first"));assertThat(list.get(1), equalTo("second"));}/*** 每次執行方法返回不同值*/@Testpublic void iterateStubbing(){when(list.size()).thenReturn(1, 2, 3, 4); // when(list.size()).thenReturn(1).thenReturn(2).thenReturn(3).thenReturn(4);assertThat(list.size(), equalTo(1));assertThat(list.size(), equalTo(2));assertThat(list.size(), equalTo(3));assertThat(list.size(), equalTo(4));assertThat(list.size(), equalTo(4));}/*** 返回自定義值*/@Testpublic void stubbingAnswer(){when(list.get(anyInt())).thenAnswer(invocationOnMock -> {Integer index = invocationOnMock.getArgumentAt(0, Integer.class);return String.valueOf(index * 10);});assertThat(list.get(0), equalTo("0"));assertThat(list.get(777), equalTo("7770"));}/*** mock對象真實調用方法*/@Testpublic void stubbingWithRealMethod(){StubbingService service = mock(StubbingService.class);when(service.getStr()).thenReturn("alex");assertThat(service.getStr(), equalTo("alex"));when(service.getInt()).thenCallRealMethod();assertThat(service.getInt(), equalTo(10));}@Afterpublic void destroy(){reset(this.list);} }public class StubbingService {public int getInt(){return 10;}public String getStr(){throw new RuntimeException();} }

3.mockito spying

Spying on real objects can be associated with “partial mocking” concept. Before the release 1.8, Mockito spies were not real partial mocks. The reason was we thought partial mock is a code smell. At some point we found legitimate use cases for partial mocks(3rd party interfaces, interim refactoring of legacy code).

import java.util.ArrayList;import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when;@RunWith(MockitoJUnitRunner.class) public class SpyingTest {@Testpublic void testSpy(){ArrayList<String> realList = new ArrayList<>();ArrayList<String> spyList = spy(realList);spyList.add("Mockito");spyList.add("PowerMock");assertThat(spyList.get(0), equalTo("Mockito"));assertThat(spyList.get(1), equalTo("PowerMock"));assertThat(spyList.isEmpty(), equalTo(false));when(spyList.isEmpty()).thenReturn(true);when(spyList.size()).thenReturn(0);assertThat(spyList.get(0), equalTo("Mockito"));assertThat(spyList.get(1), equalTo("PowerMock"));assertThat(spyList.isEmpty(), equalTo(true));assertThat(spyList.size(), equalTo(0));} } import org.junit.Before; import org.junit.Test; import org.mockito.MockitoAnnotations; import org.mockito.Spy;import java.util.ArrayList; import java.util.List;import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.when;public class SpytingAnnotationTest {@Spyprivate List<String> list = new ArrayList<>();@Beforepublic void init(){MockitoAnnotations.initMocks(this);}@Testpublic void testSpying(){list.add("Mockito");list.add("PowerMock");assertThat(list.get(0), equalTo("Mockito"));assertThat(list.get(1), equalTo("PowerMock"));assertThat(list.isEmpty(), equalTo(false));when(list.isEmpty()).thenReturn(true);when(list.size()).thenReturn(0);assertThat(list.get(0), equalTo("Mockito"));assertThat(list.get(1), equalTo("PowerMock"));assertThat(list.isEmpty(), equalTo(true));assertThat(list.size(), equalTo(0));} }

4.Mockito Argument Matchers

  • The argument matcher plays a key role in mocking. Mock objects return expected values, but when need to return different values for different arguemnts, the argument matcher comes into play.

  • Mockito returns expected values when a method is stubbed. If the method takes arguments, the argument must match during the execution.

  • Mockito verifies argument values in natural Java style by using an objects’s equals() method.

  • Sometimes, we use argument matchers when extra flexibility is required. Mockito provides built-in matchers, such as anything(), anyDouble(), anyString(), anyList(), and anyCollection().參考鏈接

  • isA(Class clazz), any(Class clazz), eq(primitive value)

    import org.junit.Test; import org.mockito.Mockito;import java.util.ArrayList; import java.util.List;import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.*;public class ArgumentsMatcher {@Testpublic void basicTest(){List<Integer> list = mock(ArrayList.class);when(list.get(0)).thenReturn(100);assertThat(list.get(0), equalTo(100));assertThat(list.get(1), nullValue());}/*** diff isA(), any()*/@Testpublic void testComplex(){Foo foo = mock(Foo.class);when(foo.function(Mockito.isA(Child1.class))).thenReturn(100);int result = foo.function(new Child1());assertThat(result, equalTo(100));result = foo.function(new Child2());assertThat(result, equalTo(0));reset(foo);when(foo.function(Mockito.any(Child1.class))).thenReturn(200);result = foo.function(new Child2());assertThat(result, equalTo(200));}static class Foo{int function(Parent parent){return parent.work();}}interface Parent{int work();}class Child1 implements Parent{@Overridepublic int work() {throw new RuntimeException();}}class Child2 implements Parent {@Overridepublic int work() {throw new RuntimeException();}} }

5.Working With WildCard Matchers

  • A test invokes a method on a code under test. When the invoke method creates a new object and passess that to a mock object, the test method doesn’t have the reference of that new object. So that test cannot stub the mock method with a specific value, as the value is not available to the test mehod. In this context, we use the wildcard matchers.

  • anyXXX()

  • any()

  • isA()

  • eq()

  • etc.

    import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner;import java.io.Serializable; import java.util.Collections;import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.*; import static org.mockito.Mockito.*;@RunWith(MockitoJUnitRunner.class) public class WildCardArgumentsMatcherTest {@Mockprivate SimpleService simpleService;@Testpublic void testWildcardMethod1(){Mockito.when(simpleService.method1(anyInt(), anyString(), anyCollection(), isA(Serializable.class))).thenReturn(100);int result = simpleService.method1(1, "he", Collections.emptySet(), "Mockito");assertThat(result, equalTo(100));result = simpleService.method1(1, "he", Collections.emptyList(), "MockitoForJava");assertThat(result, equalTo(100));}@Testpublic void wildcardMethodWithSpec(){// 大范圍的在最前面stubwhen(simpleService.method1(anyInt(), anyString(), anyCollection(), isA(Serializable.class))).thenReturn(-1);// 所有參數全為wildcard,不能部分參數為wildcard// 特定值用eq(), 否則報錯when(simpleService.method1(anyInt(), eq("alex"), anyCollection(), isA(Serializable.class))).thenReturn(100);when(simpleService.method1(anyInt(), eq("he"), anyCollection(), isA(Serializable.class))).thenReturn(200);// specific valueint result = simpleService.method1(1, "alex", Collections.emptyList(), "Mockito");assertThat(result, equalTo(100));result = simpleService.method1(1, "he", Collections.emptyList(), "Mockito");assertThat(result, equalTo(200));/* // 沒匹配上,返回類型默認值result = simpleService.method1(1, "sdfgbgfd", Collections.emptyList(), "Mockito");assertThat(result, equalTo(0));*/// 返回wildcard值result = simpleService.method1(1, "sdfgbgfd", Collections.emptyList(), "Mockito");assertThat(result, equalTo(-1));}@Testpublic void wildcardMethod2(){doNothing().when(simpleService).method2(anyInt(), anyString(), anyCollection(), isA(Serializable.class));simpleService.method2(1, "alex", Collections.emptyList(), "Mockito");verify(simpleService, times(1)).method2(1, "alex", Collections.emptyList(), "Mockito");}@Afterpublic void destroy(){// 還原stubreset(simpleService);} }

6.Hamcrest matcher

Hamcrest provides a utility matcher class, org.hamcrest.CoreMatchers. A few methods for CoreMatchers include allOf, anyOf, both, either, descibedAs, everyItem, is, isA, anything, hasItem, hasItems, equalTo, any, instanceOf, not, nullValue, notNullValue, sameInstance, end the Instance. It also includes a few string methods such as startsWith, endWith, and containsString. All these methods return a matcher.

import org.junit.Test;import java.util.stream.Stream;import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.assertThat;public class AssertMatcherTest {@Testpublic void matcher01(){int i = 10;assertThat(i, equalTo(10));assertThat(i, not(equalTo(20)));assertThat(i, is(10));assertThat(i, not(is(20)));}@Testpublic void matcher02(){double price = 23.45;assertThat(price, either(equalTo(23.45)).or(equalTo(23.54)));assertThat(price, both(equalTo(23.45)).and(not(equalTo(23.53))));assertThat(price, anyOf(is(23.45), is(33.44), is(333.666), not(55.66)));assertThat(price, allOf(is(23.45), not(is(34.77)), not(88.78)));assertThat(Stream.of(1, 2, 3).anyMatch(i -> i > 2), equalTo(true));assertThat(Stream.of(1, 2, 3).allMatch(i -> i > 0), equalTo(true));}@Testpublic void matcher03(){double price = 23.45;assertThat("the double value assertion failed", price, either(equalTo(23.54)).or(equalTo(24.35)));} }

7.Extend Matcher

import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.hamcrest.Factory;public class CompareThan<T extends Number> extends BaseMatcher<T> {private final T value;private final boolean greater;public CompareThan(T value, boolean greater) {this.value = value;this.greater = greater;}@Overridepublic boolean matches(Object actual) {Class<?> clazz = actual.getClass();if (clazz == Integer.class) {return greater ? (Integer) actual > (Integer) value : (Integer) actual < (Integer) value;}else if (clazz == Long.class){return greater ? (Long) actual > (Long) value : (Long) actual < (Long) value;}else if (clazz == Short.class){return greater ? (Short) actual > (Short) value : (Short) actual < (Short) value;}else if (clazz == Byte.class){return greater ? (Byte) actual > (Byte) value : (Byte) actual < (Byte) value;}else if (clazz == Float.class){return greater ? (Float) actual > (Float) value : (Float) actual < (Float) value;}else if (clazz == Double.class){return greater ? (Double) actual > (Double) value : (Double) actual < (Double) value;}else{throw new AssertionError("unsupported number type");}}@Factorypublic static <T extends Number> CompareThan<T> gt(T value){return new CompareThan<>(value, true);}@Factorypublic static <T extends Number> CompareThan<T> lt(T value){return new CompareThan<>(value, false);}@Overridepublic void describeTo(Description description) {description.appendText("compare two numbers failed");} } import org.junit.Test;import static com.heju.mockito.CompareThan.gt; import static com.heju.mockito.CompareThan.lt; import static org.hamcrest.CoreMatchers.both; import static org.junit.Assert.assertThat;public class MyAssertThatTest {@Testpublic void ltAndGt(){assertThat(12, gt(10));assertThat(12, both(gt(10)).and(lt(13)));} }

refactor code

public interface CompareNumber<T extends Number> {boolean compare(T expected, T actual); }public class CompareNumberImpl<T extends Number> implements CompareNumber<T>{private final boolean greater;public CompareNumberImpl(boolean greater) {this.greater = greater;}@Overridepublic boolean compare(T actual, T expected) {Class<?> clazz = expected.getClass();if (clazz == Integer.class) {return greater ? (Integer) expected > (Integer) actual : (Integer) expected < (Integer) actual;}else if (clazz == Long.class){return greater ? (Long) expected > (Long) actual : (Long) expected < (Long) actual;}else if (clazz == Short.class){return greater ? (Short) expected > (Short) actual : (Short) expected < (Short) actual;}else if (clazz == Byte.class){return greater ? (Byte) expected > (Byte) actual : (Byte) expected < (Byte) actual;}else if (clazz == Float.class){return greater ? (Float) expected > (Float) actual : (Float) expected < (Float) actual;}else if (clazz == Double.class){return greater ? (Double) expected > (Double) actual : (Double) expected < (Double) actual;}else{throw new AssertionError("unsupported number type");}} } import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.hamcrest.Factory;public class CompareNumberMatcher<T extends Number> extends BaseMatcher<T> {private final T value;private final CompareNumber<T> COMPARE;public CompareNumberMatcher(T value, boolean greater) {this.value = value;this.COMPARE = new CompareNumberImpl<>(greater);}@Overridepublic boolean matches(Object actual) {return this.COMPARE.compare(value, (T) actual);}@Factorypublic static <T extends Number> CompareNumberMatcher<T> gt(T value){return new CompareNumberMatcher<T>(value, true);}@Factorypublic static <T extends Number> CompareNumberMatcher<T> lt(T value){return new CompareNumberMatcher<>(value, false);}@Overridepublic void describeTo(Description description) {description.appendText("compare two numbers failed");} } import org.junit.Test;import static org.hamcrest.CoreMatchers.both; import static org.junit.Assert.assertThat;public class MyAssertThatTest {@Testpublic void compareThan(){assertThat(12, CompareNumberMatcher.gt(10));assertThat(12, both(CompareNumberMatcher.gt(10)).and(CompareNumberMatcher.lt(13)));} }

總結

以上是生活随笔為你收集整理的Mockito的全部內容,希望文章能夠幫你解決所遇到的問題。

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

国产 视频 久久 | 夜夜视频资源 | 91桃色在线观看视频 | 99精品在线免费观看 | 国产96在线观看 | 久久影院一区 | 久久99热这里只有精品 | 天天干天天操天天射 | 国产精品久久久久久久久久久久午 | 黄色网大全 | 天天操天天谢 | 干干夜夜 | www.亚洲黄色 | 国产成人l区 | 不卡视频国产 | 国产精品午夜在线 | 有码中文在线 | 中文字幕在线观看av | 欧美日韩高清一区 | 天天天色综合 | 丝袜足交在线 | 国产精品视频永久免费播放 | 中文字幕视频三区 | 久草在线一免费新视频 | 91看片淫黄大片一级在线观看 | 久久久夜色 | 五月天久久久 | 国产精品福利一区 | 午夜精品导航 | 最新国产一区二区三区 | 97在线观看免费观看高清 | 免费成人在线观看视频 | 99久热在线精品视频 | 天天亚洲 | 国产在线精品视频 | 99久久久| 91在线免费视频 | 精品伦理一区二区三区 | 国产精品久久久久久久免费观看 | 久久久亚洲国产精品麻豆综合天堂 | 丁香婷婷综合网 | 日日操网站 | 欧美黄色成人 | 国产黄a三级三级三级三级三级 | 91精品国产欧美一区二区 | 久久不见久久见免费影院 | 99国产免费网址 | 天天操天天操天天 | 日本精品一区二区三区在线播放视频 | 91av色| 日韩一二三 | 一区二区国产精品 | 久久亚洲综合国产精品99麻豆的功能介绍 | 日本中文字幕在线一区 | 日韩一二三区不卡 | 免费a网址 | 日本久久成人中文字幕电影 | 免费a视频在线 | 91爱爱网址| 99精品视频99| 欧美视频日韩 | 国产综合小视频 | 色综合天天干 | 精品久久久久久亚洲综合网 | 精品视频www | 国产高清一 | 毛片网站免费在线观看 | 欧美日韩国产三级 | 欧美国产在线看 | 日日夜夜天天 | 国产精品 国内视频 | 成人黄色在线播放 | 深爱综合网 | 色综合网在线 | 亚洲精品h | 欧美永久视频 | 美女视频免费一区二区 | 丁香婷婷色综合亚洲电影 | 精品国产一区二区三区四区在线观看 | av中文字幕网站 | 五月婷婷国产 | 探花在线观看 | 国产精品久久久久影院日本 | 天天操操操操操 | 在线观看黄网站 | 日韩毛片在线免费观看 | 日韩电影在线观看一区 | 国产精品一区二区久久精品爱微奶 | 四虎永久免费在线观看 | 亚洲性xxxx | 在线视频观看亚洲 | 伊人网综合在线观看 | 欧美另类交人妖 | 国产色女| 在线av资源 | 亚洲精品午夜国产va久久成人 | 91成人精品一区在线播放 | 国产在线观 | 麻豆国产精品永久免费视频 | 久久国产精品视频 | 91香蕉国产在线观看软件 | 国产在线观看一 | 日本婷婷色 | 日韩美视频 | 国产啊v在线观看 | 九九欧美视频 | 干av在线| 99电影456麻豆 | 免费大片av | 婷婷www | 午夜在线免费观看视频 | 成人宗合网 | 日韩美女av在线 | 日韩视频免费观看高清 | 国产精品99蜜臀久久不卡二区 | 天天干天天怕 | 欧美成人日韩 | 激情欧美一区二区免费视频 | 免费看黄在线 | a天堂在线看 | 久草精品视频在线观看 | 亚洲精品91天天久久人人 | 91在线视频网址 | 国产精品久久久久久久久免费 | 国产精品wwwwww | 成人一级免费视频 | 欧美日韩一区二区视频在线观看 | 五月天色中色 | 日韩免费在线观看 | 亚洲成a人片77777kkkk1在线观看 | 国产精品一区电影 | 91看片淫黄大片一级在线观看 | 亚洲精品影院在线观看 | 91亚色视频| 成人黄色一级视频 | 夜夜爽88888免费视频4848 | 中文字幕有码在线播放 | www.香蕉| 精品国产aⅴ一区二区三区 在线直播av | 精品一区二区6 | 亚洲综合精品在线 | 亚洲国产成人在线播放 | 九九九热 | 国产香蕉97碰碰碰视频在线观看 | 日韩精品久久一区二区三区 | 亚洲精品在线视频网站 | free,性欧美 九九交易行官网 | 美女视频黄在线观看 | 99久久99久久 | 国内精品免费久久影院 | 成人福利在线 | 成片视频免费观看 | 国产成人精品av | 在线观看成人毛片 | 国产午夜精品理论片在线 | 亚洲综合激情网 | 女人魂免费观看 | 国产精品久久久久久五月尺 | 国产黄网站在线观看 | 91在线小视频 | 丁香视频在线观看 | 国产视频在线观看一区 | 天天操天天操天天操天天操 | 久久国产精品成人免费浪潮 | 97在线观 | 欧美成人按摩 | 麻豆视频网址 | www.久久成人 | 亚洲一片黄| 久热只有精品 | 公与妇乱理三级xxx 在线观看视频在线观看 | 97色综合 | 精品国产大片 | 免费看一级一片 | 岛国精品一区二区 | 天天色天天搞 | 精品不卡av| 久久久久国产成人精品亚洲午夜 | 国产精品三级视频 | 香蕉网在线 | 久久久精品小视频 | 视频1区2区 | 色久av| 99久久99久久精品免费 | 黄色官网在线观看 | 天天综合久久 | 最新av网址在线 | 国产精品福利午夜在线观看 | 92精品国产成人观看免费 | 欧美午夜激情网 | 999久久久国产精品 高清av免费观看 | 精品一区二区av | 青草视频在线 | 免费视频一二三区 | 久久免费中文视频 | 精品久久久久久国产91 | 亚洲视频免费在线看 | 亚洲精品乱码久久久一二三 | 色婷婷成人 | 久久精品永久免费 | 国产精品免费观看久久 | 91精品中文字幕 | 视频一区亚洲 | 久久久久麻豆 | 综合色婷婷 | 欧美少妇bbwhd | 日韩 精品 一区 国产 麻豆 | 丁香电影小说免费视频观看 | 狠狠躁夜夜躁人人爽视频 | 日韩理论电影在线观看 | 免费看的黄色 | 99精品久久精品一区二区 | 一本一本久久a久久精品综合小说 | 久久a免费视频 | 国产精品久久久久久久午夜片 | 国产精品网站 | 伊人婷婷网 | 日日摸日日添夜夜爽97 | 丁香花五月| 久久免费精品视频 | 色综合国产 | 国产精品入口久久 | 婷婷天天色| 九九久久在线看 | 国产一区国产二区在线观看 | 日日夜夜人人精品 | 黄色av在 | 亚洲精品免费在线 | 精品国产乱码久久久久久久 | 国产免费资源 | 18做爰免费视频网站 | 婷婷电影在线观看 | 91av视频在线观看 | 五月综合网 | 日韩在线短视频 | 久久99久久精品 | 97av免费视频 | 久久久久久久国产精品视频 | 亚洲高清国产视频 | 麻豆极品| 日韩在线小视频 | 91亚洲网| 国产黄在线 | www99精品| 国产欧美综合视频 | 国产精品毛片一区视频播不卡 | 热99久久精品 | 亚洲无人区小视频 | 亚洲精品免费观看视频 | 成人国产网站 | 成人免费视频视频在线观看 免费 | 黄色三级网站 | 国产又粗又硬又长又爽的视频 | 伊人色综合网 | 99色在线播放 | 日日爽天天 | 久久久男人的天堂 | 91污视频在线观看 | av线上看| 国产视频亚洲 | 人人澡人人爱 | 欧美日韩精品在线一区二区 | 日韩在线视频不卡 | 日韩精品综合在线 | 成人午夜性影院 | 国产日韩欧美精品在线观看 | 天天天射 | 天天躁天天狠天天透 | 五月导航 | 中文字幕日韩av | 国产精品第72页 | 免费看三级 | 97免费公开视频 | 国产精品系列在线观看 | 日韩欧美视频在线免费观看 | 五月婷婷在线观看视频 | 一区二区视频在线播放 | 久久影视网 | 成人免费视频a | 黄视频色网站 | 成人在线免费av | 在线看免费 | 曰韩精品| 国产黄色片在线 | 国产视频中文字幕在线观看 | 在线电影91 | 美女av免费看 | 亚洲国产电影在线观看 | 日韩91av | 国产精品免费麻豆入口 | 97成人在线观看视频 | 久久av一区二区三区亚洲 | 国产最新视频在线观看 | 成人精品99 | 午夜精品一区二区三区在线观看 | 一级一片免费视频 | 亚洲午夜电影网 | av日韩精品 | 久久久久免费精品国产小说色大师 | 国产精品久久久久影视 | 嫩草av在线 | 中文字幕有码在线播放 | 久久国产综合视频 | 夜夜澡人模人人添人人看 | 中文字幕国产一区二区 | 国产亚洲精品久久久久久电影 | 日本久久久久久久久久久 | 亚洲国产免费av | 色网站黄 | 狠狠插狠狠干 | 黄色的网站免费看 | 国产大陆亚洲精品国产 | 午夜黄色 | 国产欧美最新羞羞视频在线观看 | a黄色片在线观看 | 97在线观看免费视频 | 日韩在线观看第一页 | 久久综合久久综合九色 | 国产成人精品一区二区三区福利 | 日韩国产精品毛片 | 日韩午夜在线观看 | 中文字幕你懂的 | 97色国产 | 九九爱免费视频在线观看 | 日本在线精品视频 | 91片在线观看| 精品国产乱码久久久久久1区2匹 | 狠狠狠色丁香综合久久天下网 | 综合铜03 | 国产精品手机在线播放 | 亚洲视频在线观看网站 | 日日操天天射 | 91成人小视频 | 天天干天天射天天操 | www在线观看国产 | 精品久久五月天 | 久久国产经典视频 | av成人亚洲| 日本精品中文字幕 | 中文字幕乱码亚洲精品一区 | 成年人国产视频 | 香蕉影视在线观看 | 在线免费观看黄网站 | 国产九色91 | 视频国产一区二区三区 | 日p视频在线观看 | www.天天成人国产电影 | 国产一级免费av | 久久草在线精品 | 人人澡人人舔 | 亚洲免费资源 | japanese黑人亚洲人4k | 91精品国自产在线观看 | 国产成人一区二区三区久久精品 | 999男人的天堂| 亚洲综合日韩在线 | 久草在线观看 | 欧美日韩国产一区二区三区在线观看 | 婷婷九月激情 | 天天激情综合网 | 中文字幕在线播放一区二区 | av久久在线| 国产精品嫩草在线 | 婷婷六月天丁香 | 中文字幕免费国产精品 | 国内精品视频在线 | 在线国产91 | 色橹橹欧美在线观看视频高清 | 伊人久久精品久久亚洲一区 | 婷婷资源站 | 99自拍视频在线观看 | 免费看成人a | 啪啪资源 | 久久男人中文字幕资源站 | 午夜av网站| 欧美一区二区日韩一区二区 | 日本一区二区三区免费观看 | 手机看片国产日韩 | 婷婷丁香九月 | 97在线超碰| 久亚洲| 成人免费在线观看电影 | 亚洲男男gaygay无套同网址 | 欧美日韩国产在线精品 | 91高清视频在线 | 久久久久亚洲最大xxxx | 在线播放你懂 | 精品影院| 国产又粗又猛又黄 | 操操操夜夜操 | 久久精品国产成人 | 日韩免费在线视频 | 精品成人网 | 96国产精品视频 | 激情网在线视频 | 91成人短视频在线观看 | 天天舔天天射天天操 | 91专区在线观看 | 99久久婷婷国产综合亚洲 | 视频成人 | 精品国产美女在线 | 狠狠干.com| 国产 日韩 在线 亚洲 字幕 中文 | 狠狠狠干 | 婷婷九九 | 国产精品一区二区精品视频免费看 | 亚a在线| 欧美美女视频在线观看 | 欧美夫妻生活视频 | 欧美性色综合网 | 99视频一区二区 | 成人av观看| 免费看一及片 | 国产日韩视频在线观看 | 日日夜夜天天操 | 欧美日韩成人一区 | 7799av | av黄在线播放 | 国产在线自 | 亚洲视频高清 | 久久最新视频 | 成人性生爱a∨ | 激情婷婷 | 色综合久久天天 | 亚洲精品小视频在线观看 | 日韩色av色资源 | 五月婷在线观看 | 成人在线网站观看 | 日本 在线 视频 中文 有码 | 国产无套精品久久久久久 | 国产日韩欧美综合在线 | 成年人免费在线观看网站 | 日韩精品一区二区三区水蜜桃 | 99热精品在线 | 黄色成人影院 | 国产一区二区在线播放视频 | 人人舔人人爽 | 国产亚洲高清视频 | 国产精品99久久久久的智能播放 | 国产伦理一区二区三区 | 国产日韩精品在线 | 人人插人人搞 | av中文字幕在线免费观看 | 狠狠躁日日躁狂躁夜夜躁av | 亚洲视屏一区 | 免费在线观看的av网站 | 色综合天天视频在线观看 | 麻豆视频国产 | 欧美日韩1区2区 | 欧美日韩中文字幕视频 | 五月天婷婷在线观看视频 | 久久久久久久久久国产精品 | 91秒拍国产福利一区 | 天天插天天爽 | 欧美aa一级片 | 国产精品99久久久久 | 91精品视频观看 | 91亚色免费视频 | 日韩av片在线 | 在线观看国产一区 | 成人福利在线播放 | 国产精久久久久久久 | 国产免费影院 | 中文字幕a∨在线乱码免费看 | 99久久精品国产欧美主题曲 | 亚洲伊人av | 欧美男女爱爱视频 | 一区二区视频欧美 | 午夜少妇av | 日韩精品免费 | 国产黄色一级大片 | 美女视频黄网站 | 亚洲日韩精品欧美一区二区 | 色婷婷在线观看视频 | 欧美日韩视频精品 | 欧美少妇xx | av一区二区三区在线观看 | 尤物一区二区三区 | 国产不卡视频在线 | 久久久久国产精品一区 | 成人免费观看网址 | 99在线视频观看 | 亚洲免费a | 国产精品美女久久久久aⅴ 干干夜夜 | 69亚洲视频| 国产亚洲精品久久久久久无几年桃 | 人人狠狠综合久久亚洲婷 | 福利在线看片 | 日本在线观看视频一区 | 婷婷激情在线观看 | 久久国产热| a级国产乱理伦片在线播放 久久久久国产精品一区 | 天天综合天天做 | 91九色九色 | 久久久www| 一级片黄色片网站 | 九九九电影免费看 | 久久免费美女视频 | 国产一区成人 | 国产小视频在线免费观看视频 | 亚洲最大的av网站 | 中文字幕在线观看第一页 | av高清一区二区三区 | 欧美另类一二三四区 | 亚洲婷婷免费 | 亚洲天堂精品视频在线观看 | 五月婷婷久久丁香 | 激情久久小说 | 九九热有精品 | 九九免费精品 | 国内精品视频免费 | 2018好看的中文在线观看 | 欧美一区在线看 | 久久精品国产久精国产 | 狠狠色香婷婷久久亚洲精品 | 色先锋av资源中文字幕 | 三级毛片视频 | 天天射狠狠干 | 精品久久久久久亚洲综合网站 | 国产精品18久久久久久久网站 | 久久久在线视频 | 久久1区 | 国产精品一区二区视频 | 精品国产精品一区二区夜夜嗨 | 欧美极品少妇xxxx | 免费视频区| 麻豆久久久久久久 | 在线观看国产www | 亚洲人在线7777777精品 | 久久天天躁狠狠躁夜夜不卡公司 | 欧美在线视频一区二区三区 | 成人av资源站 | 久久久精品免费看 | 亚洲国产色一区 | 国产视频首页 | 欧美日韩免费一区二区三区 | 精品在线一区二区三区 | 黄色一级在线视频 | 日韩欧美在线观看 | 超碰97在线人人 | 97视频在线免费 | 国产在线小视频 | 六月色丁香 | 91精品网站在线观看 | 欧美日韩激情视频8区 | 91精品国产综合久久福利 | 午夜一级免费电影 | 久久99亚洲精品久久久久 | 亚洲我射av | 国产 视频 高清 免费 | 亚洲在线成人精品 | 免费日韩电影 | 欧美日韩一区二区久久 | 亚洲高清在线观看视频 | av天天在线观看 | 国产精品系列在线播放 | 五月香视频在线观看 | 天堂va在线高清一区 | 99精品在线播放 | 九九色网 | 激情欧美一区二区三区 | 人人天天夜夜 | 人人爽人人爽 | 久av电影 | 久久久久久高潮国产精品视 | 亚洲国产精品一区二区久久hs | 首页中文字幕 | 天天艹天天 | a级国产乱理伦片在线观看 亚洲3级 | 91成人精品视频 | 激情五月***国产精品 | 国产一级特黄电影 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 五月婷婷一区二区三区 | 久久国产精品久久国产精品 | 国产精品va在线观看入 | 久久国产精品系列 | 天天爽夜夜爽精品视频婷婷 | 色婷婷啪啪免费在线电影观看 | av高清不卡 | 色婷婷久久| 亚洲三区在线 | 成人黄色毛片 | 精品久久久久久一区二区里番 | 最近日本中文字幕a | 免费观看视频黄 | 国产亚洲va综合人人澡精品 | 97在线影视| 蜜臀精品久久久久久蜜臀 | 最近最新最好看中文视频 | 天天做天天爱天天爽综合网 | 中文字幕一区二区三区久久蜜桃 | 国内精品久久久久影院一蜜桃 | japanesefreesexvideo高潮 | 日本激情动作片免费看 | 91看片淫黄大片一级在线观看 | 亚洲开心激情 | 欧美 日韩 国产 成人 在线 | 精品国产精品一区二区夜夜嗨 | 日韩高清不卡一区二区三区 | 成年人app网址 | 亚洲精品美女久久17c | 精品久久一二三区 | 日本在线观看一区二区 | 亚洲综合情 | 国产一区二区久久久久 | 操操操日日日干干干 | 国产99久久久国产精品成人免费 | av中文字幕电影 | 日韩黄色免费 | 欧美成年性| 久久久精品日本 | 日韩xxxbbb | 久久观看最新视频 | 国产麻豆精品一区 | 久久成人麻豆午夜电影 | 欧美日韩在线免费观看视频 | 粉嫩一区二区三区粉嫩91 | 五月综合激情 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | av一级在线 | 亚洲视频精品在线 | 欧美日韩亚洲第一 | 午夜精品久久久久久久久久久久 | 中文字幕久久精品亚洲乱码 | 在线观看黄a | 国产免费一区二区三区最新 | 国产麻豆精品一区二区 | 日本韩国精品一区二区在线观看 | 久久精品亚洲精品国产欧美 | 五月婷婷中文网 | 中文av日韩 | 亚洲免费公开视频 | 一级欧美日韩 | 久久综合欧美精品亚洲一区 | 天堂网一区二区 | 亚洲国产97在线精品一区 | 色综合网 | 欧美韩国日本在线观看 | 成人免费看片98欧美 | 久久男人中文字幕资源站 | 不卡电影免费在线播放一区 | 日韩电影在线观看一区 | 婷婷丁香九月 | 午夜三级大片 | 狠狠躁天天躁综合网 | 精品国产电影一区 | 成人小视频在线免费观看 | 久久久久国产精品一区 | 精品国产乱码久久久久久三级人 | 五月天色综合 | av中文在线 | 91av视频在线观看 | 成人av一区二区在线观看 | 日韩色综合网 | 久久久久久久久久久影视 | 成人91在线 | 人人爱在线视频 | 色综合久久88色综合天天人守婷 | av先锋中文字幕 | 在线看日韩 | 婷婷久久亚洲 | 色网站视频 | 国产亚洲在线观看 | 人人爽人人澡人人添人人人人 | 色噜噜日韩精品一区二区三区视频 | 日p视频在线观看 | 狠狠狠色丁香婷婷综合激情 | 涩涩网站在线看 | 久视频在线 | 欧美日韩大片在线观看 | 成人av免费在线播放 | 在线精品视频免费播放 | 韩国av免费在线观看 | 国产成免费视频 | 成 人 黄 色 片 在线播放 | 最新成人av | 久久精品一区二区三区四区 | 97久久精品午夜一区二区 | 一区二精品 | 亚洲成av人片在线观看 | 国产在线不卡 | 在线观看视频国产一区 | 国产一区二区免费 | 亚洲国产高清在线观看视频 | 高清有码中文字幕 | 色欧美88888久久久久久影院 | 8090yy亚洲精品久久 | 亚洲黄色一级视频 | 久久一区二区三区国产精品 | 日韩精品久久一区二区三区 | 成人av日韩 | 国产亚洲资源 | 久久er99热精品一区二区三区 | 久久久久婷 | 久久久精品网站 | 成人在线免费视频观看 | 美女激情影院 | 国产一区不卡在线 | 成人在线观看网址 | 国产二区电影 | 在线国产精品一区 | 菠萝菠萝在线精品视频 | 亚洲va综合va国产va中文 | 亚洲国产av精品毛片鲁大师 | 激情五月婷婷综合 | 欧美日韩国产免费视频 | 精品日韩中文字幕 | 欧美一级电影在线观看 | 欧美色黄| 亚洲精品国产欧美在线观看 | 免费成人在线观看 | 天天操福利视频 | 免费一级特黄毛大片 | 天天干天天操天天做 | 99精品在这里| 丁香婷婷在线 | 欧美性猛片, | 一区二区久久 | 久草在线免 | 日韩手机视频 | 久久激情视频免费观看 | 丁香花在线视频观看免费 | 91禁在线看| 色综合久久88色综合天天人守婷 | 91女神的呻吟细腰翘臀美女 | 中文字幕在线观 | av三级av | 日韩在线观看网站 | 97电院网手机版 | www色婷婷com | 青春草视频在线播放 | 最新动作电影 | 免费观看黄色av | 一区二区三区 中文字幕 | 欧产日产国产69 | 高清有码中文字幕 | www.com黄色| 国偷自产中文字幕亚洲手机在线 | 五月婷婷在线观看 | 99福利片| 亚洲毛片一区二区三区 | 国产黄色免费 | 亚洲国产精品一区二区久久hs | 91色偷偷 | 国产亚洲免费的视频看 | 国产精品igao视频网入口 | 国产xx在线 | 亚洲天堂激情 | 最新色站 | 天天综合网在线 | 麻豆传媒视频在线 | 91av在线免费看 | 91福利区一区二区三区 | 91精品少妇偷拍99 | 日韩精品91偷拍在线观看 | 超碰人人99 | 中国一 片免费观看 | 日韩在线免费 | 久久精品视频免费观看 | 国产又粗又猛又黄又爽视频 | 国产精品嫩草影视久久久 | 国产一区二区三区久久久 | 九九热免费视频在线观看 | 久久久久国产一区二区三区 | 天天综合狠狠精品 | 夜夜嗨av色一区二区不卡 | 91精品中文字幕 | 精品国产_亚洲人成在线 | 婷婷干五月 | ww亚洲ww亚在线观看 | 中文字幕亚洲欧美日韩 | 亚洲视频在线免费观看 | 久久免费视频8 | 精品国产欧美一区二区三区不卡 | 91porny九色在线播放 | 国产尤物在线 | 四虎永久精品在线 | 人人澡人人添人人爽一区二区 | 婷婷六月天丁香 | www色| 超碰97人人干 | av免费网| 夜色资源站国产www在线视频 | 九色91福利| 国产免费人成xvideos视频 | 美女一区网站 | 夜夜操天天干 | 亚洲天天看| 婷婷综合网 | 中文字幕三区 | 99精品国产在热久久下载 | 国产超碰97| www色,com | 久久久精品视频网站 | 日韩欧美在线免费观看 | 美女一级毛片视频 | 97自拍超碰 | 亚洲国产色一区 | 精品久久久一区二区 | 91手机视频| 欧美analxxxx | 色国产视频 | 2019av在线视频 | 中文字幕丝袜 | 一本一本久久a久久精品综合 | 国产精品毛片一区视频播 | 欧美日韩视频在线一区 | 久久夜色精品国产欧美乱极品 | 99久久影院 | 一区二区 不卡 | 亚洲精品婷婷 | 久久精品国产一区二区电影 | 精品女同一区二区三区在线观看 | 日韩欧美69 | 91社区国产高清 | 97电影网手机版 | 亚洲国产三级在线 | 日韩久久精品一区二区 | 国产中文欧美日韩在线 | 欧美韩国日本在线观看 | 亚洲精品一区中文字幕乱码 | 超碰人人国产 | 国产一区成人在线 | 九九免费观看视频 | 99免费在线观看视频 | 久久精品国产一区 | 免费a视频 | 久久av观看 | 中文视频在线看 | 天天草天天干天天 | 亚洲国产成人精品在线观看 | 午夜av大片 | 国产手机精品视频 | 精品国产99国产精品 | 不卡av在线免费观看 | 中文字幕影片免费在线观看 | 一区二区欧美日韩 | 手机在线永久免费观看av片 | 欧美99热 | ww亚洲ww亚在线观看 | 91亚洲精品久久久中文字幕 | 国产中文字幕在线观看 | 亚洲精品国产精品久久99热 | 97视频资源 | 中文在线| 中文字幕中文字幕在线中文字幕三区 | 成人免费 在线播放 | 国产免费作爱视频 | 成人h电影 | 国产免费嫩草影院 | 一区二区av | 在线观看免费色 | 四虎在线影视 | 国产精品18久久久久久首页狼 | 中文字幕在线播放av | 丁香婷婷射 | 亚洲天天在线 | 成人久久国产 | 日韩国产在线观看 | 国产在线免费观看 | 欧美成人日韩 | 成人黄色在线看 | 99电影 | av网站在线观看免费 | 久久免费影院 | 九九热视频在线免费观看 | 亚洲精品国产区 | 国精产品999国精产品视频 | 亚洲乱码在线观看 | 欧美日本不卡高清 | 免费看一级特黄a大片 | 一区二区精品视频 | 久久成人国产精品一区二区 | 性色av一区二区三区在线观看 | 久久久高清视频 | 婷婷丁香花五月天 | 嫩小bbbb摸bbb摸bbb| 2019天天干夜夜操 | 中文字幕av在线免费 | 狠狠狠狠狠狠狠狠干 | 国产精品mm | 成人黄色在线电影 | 国产 日韩 在线 亚洲 字幕 中文 | 国产网红在线 | 成人av一区二区兰花在线播放 | 国产无套视频 | 免费看色网站 | 香蕉影视app | 日韩一区二区三区免费电影 | 久久电影日韩 | 97超级碰碰碰视频在线观看 | 久久久一本精品99久久精品66 | 在线观看免费视频你懂的 | 一区二区中文字幕在线观看 | 亚洲高清在线观看视频 | 又黄又爽又色无遮挡免费 | 免费日韩三级 | 五月婷婷久久综合 | 日韩精品在线免费观看 | 久久视奸 | 国产成人精品免费在线观看 | 日本91在线 | 色婷在线 | 免费在线一区二区 | 亚洲一区二区三区四区在线视频 | 91精品国产自产在线观看永久 | 性色视频在线 | 天天操天天干天天爽 | 91精品毛片| 一本到视频在线观看 | av免费网站在线观看 | 91禁看片| 中文字幕五区 | 国产无吗一区二区三区在线欢 | 欧美日韩国产精品一区二区 | 国产亚洲视频在线 | 天天操天天干天天爽 | 天天草天天干天天射 | 激情导航 | 97精品国产91久久久久久 | 国产福利一区在线观看 | av久久在线 | 91亚洲精| 色妞色视频一区二区三区四区 | 亚洲欧美日韩国产 | 亚州精品天堂中文字幕 | 亚洲精品久久久久中文字幕二区 | 久久免费视频播放 | 欧美精品一区二区免费 | 国产黄a三级三级 | 久久久久久免费视频 | 久草视频在 | 九九热精品视频在线播放 | 91试看| www.97色.com| av不卡免费在线观看 | 麻豆视频成人 | 成人激情开心网 | 99在线精品免费视频九九视 | 韩国av免费看 | .国产精品成人自产拍在线观看6 | 午夜久久久久久久久久久 | 国产精品久久久久久a | 久久久久9999亚洲精品 | 日韩精品短视频 | 国产色一区 | 日韩在线免费观看视频 | 一级黄色免费网站 | 东方av免费在线观看 | 国产精品视频地址 | 成人看片 | 一区二区三区免费在线观看 | 欧美精品一区二区免费 | 99热精品视 | 麻豆94tv免费版 | 狠狠伊人| 97视频在线观看免费 | 久久久久国产a免费观看rela | 999视频精品| 水蜜桃亚洲一二三四在线 | 丁香九月婷婷综合 | 三级视频国产 | 亚洲免费黄色 | 伊人久久国产精品 | 黄色一级在线视频 | 特级黄色一级 | 在线观看视频你懂的 | 国产久视频 | 国产破处在线视频 | 精品在线观看一区二区 | 国产婷婷视频在线 | 97人人人人| 欧美日韩一级在线 | 激情婷婷在线观看 | 免费日韩三级 | 中文有码在线 | 欧美日韩在线精品一区二区 | 久久亚洲影视 | 日日夜夜草 | 亚洲精品在线视频网站 | 香蕉免费| 国产高清视频在线 | 缴情综合网五月天 | 色免费在线 | 香蕉网在线 | 免费看污的网站 | 精品伊人久久久 | 亚洲精品日韩在线观看 | 久久国产精品免费观看 | 黄色av成人在线 | 亚洲精品在 | 伊人五月天婷婷 | 999视频在线播放 | 日韩精品黄 | 天天干天天操天天 | 亚洲亚洲精品在线观看 | 日韩丝袜|