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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

基于JUnit4扩展老项目的UT框架且自动DI

發(fā)布時(shí)間:2023/12/29 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于JUnit4扩展老项目的UT框架且自动DI 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • JUnit4的ClassRunner
  • MockMvc直接對(duì)接口發(fā)起請(qǐng)求
  • 橋接ibatis的bean
  • Web到App的路由
  • 后記

在公司維護(hù)的項(xiàng)目使用的框架很老(內(nèi)部自研,基于Spring2實(shí)現(xiàn)的),單元測(cè)試框架使用的JUnit3。日常工作開(kāi)發(fā)調(diào)試和自測(cè)兩種辦法:啟動(dòng)服務(wù)(weblogic,要打包啟動(dòng),慢)、單元測(cè)試(較快,調(diào)試方便)。但老的寫單測(cè)實(shí)在是很繁瑣:先繼承一個(gè)單元測(cè)試基類,覆蓋其中獲取配置文件方法(相當(dāng)于配置context文件),再在另外兩個(gè)配置文件中修改(與業(yè)務(wù)耦合的很緊),然后開(kāi)始從context中g(shù)etBean,然后你的準(zhǔn)備工作終于做好了可以開(kāi)始測(cè)試了。尤其對(duì)于新同事,有人指導(dǎo)還行,沒(méi)有的話簡(jiǎn)直抓瞎(當(dāng)然如果深入了解一下,也是能輕易搞定的,比如我哈哈哈)。思來(lái)想去決定:controller的單測(cè),可以簡(jiǎn)化步驟(比如獲取controller bean然后再調(diào)用對(duì)應(yīng)方法這一步);加入自動(dòng)依賴注入,就像使用@Autowired一樣(當(dāng)前項(xiàng)目中還是使用的全XML配置方式);將配置集中起來(lái)一個(gè)地方管理(使用注解);升級(jí)到JUnit4.12。

JUnit4的ClassRunner

基于JUnit4的擴(kuò)展,主要是利用其提供的ClassRunner,JUnit4.12默認(rèn)的是BlockJUnit4ClassRunner,于是我們擴(kuò)展該類,看看能在這里做點(diǎn)什么。

首先來(lái)看必須覆蓋的構(gòu)造器,構(gòu)造參數(shù)clazz就是當(dāng)前測(cè)試類的class。除了調(diào)用父類構(gòu)造器,在此處還加了一步Pafa3TestContext.initContext,初始化Ioc容器,以及保存一些測(cè)試時(shí)需要的上下文信息。

然后注意createTest這個(gè)方法,事實(shí)上JUnit會(huì)根據(jù)測(cè)試class生成對(duì)應(yīng)的實(shí)例。之前說(shuō)過(guò)還實(shí)現(xiàn)了自動(dòng)DI,那么很顯然這一步在生成instance之后做再合適不過(guò)了,具體就是prepareAutoInject方法,至此自動(dòng)DI已經(jīng)實(shí)現(xiàn),在測(cè)試類里@AutoInject private SomeController controller就可以直接獲取到bean了,當(dāng)然也提供了可以根據(jù)id獲取bean。

public class Pafa3Junit4ClassRunner extends BlockJUnit4ClassRunner {public Pafa3Junit4ClassRunner(Class<?> clazz) throws Exception {super(clazz);Pafa3TestContext.initContext(getTestClass().getJavaClass());}@Overrideprotected Object createTest() throws Exception {Object instance = super.createTest();prepareAutoInject(instance);return instance;}private void prepareAutoInject(Object instance) throws IllegalAccessException {TestClass testClass = getTestClass();List<FrameworkField> frameworkFields = testClass.getAnnotatedFields(AutoInject.class);for (FrameworkField frameworkField : frameworkFields) {Object bean;String beanName = frameworkField.getAnnotation(AutoInject.class).value();if (!"".equals(beanName)) {bean = Pafa3TestContext.getContext().getBean(beanName);} else {Class<?> beanType = frameworkField.getType();Map beansOfType = Pafa3TestContext.getContext().getBeansOfType(beanType, true, true);Iterator it = beansOfType.values().iterator();if (it.hasNext()) {bean = it.next();} else {throw new NoSuchBeanDefinitionException(beanType, "no bean type found");}}Field field = frameworkField.getField();field.setAccessible(true);field.set(instance, bean);}} } public class Pafa3TestContext {private static ApplicationContext context;private static String[] contextLocations;private static String[] sqlConfigLocations;private static Class<?> clazz;private Pafa3TestContext() {}public static void initContext(Class<?> clazz) {Pafa3TestContext.clazz = clazz;initConfigLocations();initContext();}public static ApplicationContext getContext() {return context;}public static String[] getContextLocations() {return contextLocations;}public static String[] getSqlConfigLocations() {return sqlConfigLocations;}private static void initConfigLocations() {ContextLocations annotation = clazz.getAnnotation(ContextLocations.class);if (annotation == null) {throw new IllegalStateException("test class should be annotated with ContextLocations");}sqlConfigLocations = annotation.sqlMap();String[] locations = annotation.context();int len = locations.length;// 業(yè)務(wù)定制的,為了少寫倆,直接先寫死吧contextLocations = Arrays.copyOf(locations, len + 2); contextLocations[len] = "classpath:biz-context.xml";contextLocations[len + 1] = "classpath:common-context.xml";}private static void initContext() {if (context == null) {synchronized (Pafa3TestContext.class) {if (context == null) {context = new ClassPathXmlApplicationContext(getContextLocations());}}}} } @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Inherited public @interface ContextLocations {String[] context();String[] sqlMap() default {};}@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @Inherited public @interface AutoInject {String value() default ""; }

MockMvc直接對(duì)接口發(fā)起請(qǐng)求

原來(lái)對(duì)controller的測(cè)試是要先獲取這個(gè)controller的bean,然后調(diào)用接口實(shí)際對(duì)應(yīng)的方法。這里其實(shí)復(fù)雜了,因?yàn)閎ean都是同一個(gè)類型的,獲取哪一個(gè)并沒(méi)有區(qū)別。如果有給定接口,實(shí)際已經(jīng)得到了實(shí)際要調(diào)用的方法,這個(gè)對(duì)應(yīng)關(guān)系,也是定義在一個(gè)MethodNameResolver類型的bean里的,顯然可以從我們的Pafa3TestContext里獲取到(因?yàn)檫@時(shí)候已經(jīng)初始化好了)。

public class MockMvcResult {private ModelAndView modelAndView;private String content;public MockMvcResult(ModelAndView modelAndView, String content) {this.modelAndView = modelAndView;this.content = content;}public Object getModel() {return modelAndView == null ? null : modelAndView.getModel();}public Object getView() {return modelAndView == null ? null : modelAndView.getView();}public String getContentAsString() {return content;} }public interface MockMvc {MockMvcResult request() throws Exception; }public class StandaloneMockMvc implements MockMvc {private final ApplicationContext context = Pafa3TestContext.getContext();private final String url;private final MockHttpServletRequest request;private final MockHttpServletResponse response;public StandaloneMockMvc(StandaloneMockMvcBuilder builder) {this.url = builder.getUrl();this.request = builder.getRequest();this.response = builder.getResponse();}@Overridepublic MockMvcResult request() throws Exception {Map beanMap = context.getBeansOfType(MethodNameResolver.class, true, true);if (beanMap == null || beanMap.isEmpty()) {throw new NoSuchBeanDefinitionException(MethodNameResolver.class, "ensure add the web context file");}String methodName = null;Iterator it = beanMap.values().iterator();while (it.hasNext() && methodName == null) {MethodNameResolver resolver = (MethodNameResolver) it.next();try {methodName = resolver.getHandlerMethodName(request);} catch (NoSuchRequestHandlingMethodException ignored) {}}if (methodName == null) {throw new NoSuchRequestHandlingMethodException(request);}Object controller = context.getBean(url);return dispatchRequest(methodName, controller);}private MockMvcResult dispatchRequest(String methodName, Object controller) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {Method handleMethod = controller.getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);Object result = handleMethod.invoke(controller, request, response);if (result == null) {return new MockMvcResult(null, response.getContentAsString());}if (ModelAndView.class.isAssignableFrom(result.getClass())) {return new MockMvcResult((ModelAndView) result, null);}return null;} }public class StandaloneMockMvcBuilder {private static final String SESSION_USER = "userinformation";private final String url;private final String method;private final MockHttpServletRequest request;private final MockHttpServletResponse response;public StandaloneMockMvcBuilder(String url) {this("GET", url);}public StandaloneMockMvcBuilder(String method, String url) {this.url = url;this.method = method;this.request = new MockHttpServletRequest(null, this.method, this.url);this.response = new MockHttpServletResponse();}public StandaloneMockMvcBuilder addParameter(String name, String value) {request.addParameter(name, value);return this;}public String getUrl() {return url;}public String getMethod() {return method;}public MockHttpServletRequest getRequest() {return request;}public MockHttpServletResponse getResponse() {return response;}public StandaloneMockMvcBuilder withUser(String uid) {UserInformationVO user = new UserInformationVO();user.setUID(uid);return withUser(user);}public StandaloneMockMvcBuilder withUser(UserInformationVO user) {request.getSession().setAttribute(SESSION_USER, user);return this;}public StandaloneMockMvc build() {return new StandaloneMockMvc(this);} }

至此,我們可以直接構(gòu)造對(duì)應(yīng)的URL以及相關(guān)參數(shù),使用MockMvc發(fā)起請(qǐng)求等待結(jié)果了。

橋接ibatis的bean

以上兩點(diǎn)完成后,還差一個(gè)連接數(shù)據(jù)庫(kù)的bean。項(xiàng)目中使用的是ibatis,讀取的sqlmap是定義在一個(gè)sqlmap-config.xml里,該配置包含所有的sqlmap(按功能模塊分的),然后由SqlMapClientFactoryBean來(lái)讀取sqlmap-config.xml。由于配置都集中管理在ContextLocations注解里了,所以這里也需要重新實(shí)現(xiàn),用了一個(gè)小聰明,直接根據(jù)配置的sqlMapConfig生成一個(gè)XML內(nèi)容交給SqlMapClientFactoryBean去讀取。

public class SimpleSqlMapClientFactoryBean extends SqlMapClientFactoryBean {@Overridepublic void afterPropertiesSet() throws IOException {Resource configLocation = getSqlConfigResource();super.setConfigLocation(configLocation);super.afterPropertiesSet();}private Resource getSqlConfigResource() {String[] configLocations = Pafa3TestContext.getSqlConfigLocations();if (configLocations == null || configLocations.length == 0) {return new ClassPathResource("sqlmap-config.xml");}return builtXMLResource(configLocations);}private Resource builtXMLResource(String[] configLocations) {final String xmlAsString = buildSqlMapConfigContent(configLocations);return new AbstractResource() {@Overridepublic InputStream getInputStream() throws IOException {return new ByteArrayInputStream(xmlAsString.getBytes("UTF-8"));}@Overridepublic String getDescription() {return "XML built as string: " + xmlAsString;}};}private String buildSqlMapConfigContent(String[] configLocations) {Document document = DocumentHelper.createDocument();document.setXMLEncoding("UTF-8");document.addDocType("sqlMapConfig", "-//iBATIS.com//DTD SQL Map Config 2.0//EN", "http://www.ibatis.com/dtd/sql-map-config-2.dtd");Element sqlMapConfig = document.addElement("sqlMapConfig");Element setting = sqlMapConfig.addElement("settings");setting.addAttribute("cacheModelsEnabled", "true");setting.addAttribute("enhancementEnabled", "false");setting.addAttribute("lazyLoadingEnabled", "false");setting.addAttribute("maxRequests", "3000");setting.addAttribute("maxSessions", "3000");setting.addAttribute("maxTransactions", "3000");setting.addAttribute("useStatementNamespaces", "true");for (String location : configLocations) {Element sqlMap = sqlMapConfig.addElement("sqlMap");sqlMap.addAttribute("resource", location);}return document.asXML();} }

Web到App的路由

項(xiàng)目是分層部署的,分為了Web(DMZ區(qū))和App(內(nèi)網(wǎng))兩層,前者就是controller所在,然后遠(yuǎn)程調(diào)用App層的Action(通過(guò)EJB)。在本地單元測(cè)試,顯然不會(huì)去構(gòu)造一個(gè)EJB容器環(huán)境,而是直接通過(guò)本地同一個(gè)JVM調(diào)用即可(項(xiàng)目中調(diào)用的bean的名字是寫死的),于是實(shí)現(xiàn)一個(gè)本地的ApplicationController。

public class AppControllerFactoryBean implements FactoryBean {private ApplicationController proxy;@Overridepublic Object getObject() throws Exception {if (proxy == null) {proxy = getProxy();}return proxy;}@Overridepublic Class getObjectType() {return proxy != null ? proxy.getClass() : ApplicationController.class;}@Overridepublic boolean isSingleton() {return true;}private ApplicationController getProxy() {return (ApplicationController) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),new Class[]{ApplicationController.class}, new LocalProxyAppControllerInvocationHandler());} }public class LocalProxyAppControllerInvocationHandler implements InvocationHandler {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {String methodName = method.getName();Class<?>[] parameterTypes = method.getParameterTypes();if (method.getDeclaringClass() == Object.class) {throw new UnsupportedOperationException("unsupported method: " + method);}if ("toString".equals(methodName) && parameterTypes.length == 0) {return "proxy of ApplicationController";}if ("hashCode".equals(methodName) && parameterTypes.length == 0) {return 1;}if ("equals".equals(methodName) && parameterTypes.length == 1) {return Boolean.FALSE;}if (args.length != 1 || !(args[0] instanceof ServiceRequest)) {throw new IllegalArgumentException("arguments length not 1 or not type of ServiceRequest");}return invokeLocal((ServiceRequest) args[0]);}private Object invokeLocal(ServiceRequest request) throws BusinessServiceException {String beanName = request.getRequestedServiceID();Action action = (Action) Pafa3TestContext.getContext().getBean(beanName);return action.perform(request);} }

寫完之后發(fā)現(xiàn),似乎不用動(dòng)態(tài)代理,直接實(shí)現(xiàn)ApplicationController就行了= =||。不過(guò)鑒于都寫出來(lái)了,暫時(shí)先用著吧。主要是提醒看代碼的同志,toString, equals, hashCode三個(gè)方法,在動(dòng)態(tài)代理時(shí)也是會(huì)被代理的。

后記

大功告成,現(xiàn)在寫單元測(cè)試的效率比之前提高的簡(jiǎn)直不要太多。終于不用東配置一下西添加一下了(而且有兩個(gè)還是重復(fù)的),對(duì)團(tuán)隊(duì)的提升自我感覺(jué)還是比較多的。但是有啥借鑒的么?我覺(jué)得沒(méi)啥,都是被老項(xiàng)目老框架逼出來(lái)的輪子,畢竟新框架直接上Spring的test即可,功能強(qiáng)大好用。順便吐槽一下公司:老項(xiàng)目難升級(jí)情有可原,但是2017年新啟動(dòng)的項(xiàng)目,還有必要繼續(xù)jdk1.6 + weblogic + spring3.1嗎?

轉(zhuǎn)載于:https://www.cnblogs.com/dirac/p/8846905.html

總結(jié)

以上是生活随笔為你收集整理的基于JUnit4扩展老项目的UT框架且自动DI的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

亚洲欧美视频在线 | 亚洲成人黄色 | 麻豆传媒视频在线免费观看 | 日韩免费看 | 久久96国产精品久久99软件 | 久久久受www免费人成 | 精品国产一区二区三区日日嗨 | 人人澡人人添人人爽一区二区 | 欧美日韩高清国产 | 色综合久久综合 | 亚洲综合激情 | bbbb操bbbb| 天堂av网站 | 99r国产精品 | 国产精品成人久久久 | 91字幕| 日韩免费视频一区二区 | 欧美日韩高清一区 | 日韩一二三在线 | av电影免费在线看 | 国产精品欧美一区二区 | 亚洲国产成人精品电影在线观看 | 亚洲精品国产精品国自产观看浪潮 | 97免费在线观看视频 | 黄色片网站大全 | 色综合天天在线 | a级黄色片视频 | 最近更新中文字幕 | 超碰在线天天 | 69av在线播放 | 婷婷色网视频在线播放 | 黄色福利| 欧美精品被 | 麻豆成人在线观看 | 精品久操 | 深夜免费小视频 | 亚洲高清国产视频 | 黄色av电影一级片 | 国产三级香港三韩国三级 | 五月婷婷一区 | 在线成人观看 | 免费黄色在线播放 | 欧美日韩高清在线一区 | 亚洲黄在线观看 | 在线久草视频 | 国产成人免费在线观看 | 天天操 夜夜操 | 天天射成人 | 五月天九九 | 高清国产午夜精品久久久久久 | 日韩中文在线电影 | 国产99精品在线观看 | 国产韩国精品一区二区三区 | 国产精品一区二区在线播放 | 国产精品女同一区二区三区久久夜 | 天堂va欧美va亚洲va老司机 | 国产一级免费在线观看 | 日韩视频在线不卡 | 精品视频久久久 | 精品久久久久久久久久久久久久久久久久 | 波多野结衣在线视频一区 | 国产日韩精品欧美 | 99在线播放 | 国产不卡视频在线 | 中文字幕在线观看视频一区 | 久久久免费毛片 | 日韩黄色免费电影 | 日本久草电影 | 国内精品久久久久久 | 色播五月激情五月 | 天堂网一区二区 | 91激情视频在线 | 欧美精品在线视频观看 | 日韩中字在线 | 久久超级碰视频 | 欧美91视频| 国产精品久久久久久电影 | 911香蕉视频 | 婷婷激情五月 | 亚洲专区欧美专区 | 欧美日韩免费观看一区二区三区 | av网站免费线看精品 | 97成人在线 | 精品资源在线 | 天天色综合三 | a黄色片在线观看 | 黄色小视频在线观看免费 | 国产香蕉久久精品综合网 | 国产专区视频 | 国产香蕉视频在线观看 | 99视频精品全部免费 在线 | 国色天香在线 | 色网免费观看 | 日韩免费精品 | 日日操日日操 | 欧美一级在线看 | 国产 一区二区三区 在线 | 美女视频一区二区 | 91精品伦理 | 黄色av免费| 91少妇精拍在线播放 | 97免费视频在线播放 | 久久艹中文字幕 | 黄色软件在线观看免费 | 久久大视频| 日韩免费一区二区三区 | 国产手机在线观看视频 | 天天舔天天搞 | 色婷婷综合久久久中文字幕 | 日韩精品一区二区三区在线视频 | 亚洲精品国偷拍自产在线观看 | 国产成人久久精品 | 欧美伦理电影一区二区 | 婷婷丁香激情综合 | 日韩在线视频一区二区三区 | a√资源在线 | 欧美激情视频一区 | 美女免费黄网站 | 色.www| 狠狠操狠狠干天天操 | 人人射| 1000部国产精品成人观看 | 中文字幕乱码在线播放 | 亚洲黄色激情小说 | 精品一区二区av | 91精品国产亚洲 | 日韩中文字幕一区 | 久久久精品成人 | 九九热精品视频在线播放 | 久久精品影视 | 91麻豆免费版 | 午夜精品久久久久久久久久久久 | 一级黄色网址 | 精品国产乱码一区二区三区在线 | 婷婷综合五月天 | a黄色片 | 亚洲精品乱码久久久久久蜜桃不爽 | 日日操天天爽 | 国产美女免费观看 | 国产成人高清av | 日本aaaa级毛片在线看 | 成人黄大片视频在线观看 | 日韩av在线一区二区 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 亚洲成人av一区二区 | 91av成人 | 精品国产视频在线观看 | 天天操天天爱天天爽 | 2020天天干夜夜爽 | 亚洲视频免费在线 | 综合天天 | 日韩簧片在线观看 | 国产精品3| 超碰人人草人人 | 91免费在线看片 | 天堂av最新网址 | 91经典在线| 99r精品视频在线观看 | 日日夜夜免费精品 | 手机av电影在线 | 永久免费毛片在线观看 | 久久久久在线视频 | 国产一区欧美一区 | 国产 日韩 在线 亚洲 字幕 中文 | 色老板在线 | 国产中文在线观看 | 日韩成人在线免费观看 | 日韩试看 | 五月婷亚洲 | 久久免费视频7 | 国产专区视频 | 久久久久免费视频 | 99久免费精品视频在线观看 | 99久久夜色精品国产亚洲 | 在线小视频 | 国内综合精品午夜久久资源 | 丁香五香天综合情 | 久久激情五月激情 | 国产综合婷婷 | 国产美女精品人人做人人爽 | 久久久国产影视 | 日韩av午夜在线观看 | 天天操天天干天天 | 欧美一区二区三区在线看 | 久久久精品电影 | 久爱综合 | 国产精品亚洲人在线观看 | 在线视频 区 | 亚洲精品日韩一区二区电影 | 久久综合99 | 超碰成人免费电影 | 久久国产91 | 午夜视频黄 | 久久艹久久 | 亚洲永久精品国产 | 久草在线视频中文 | 日韩在线一区二区免费 | 久久99精品国产麻豆宅宅 | 美女网站免费福利视频 | 九九免费在线观看视频 | 久久伊人爱 | 国产一级免费在线观看 | 亚洲精品午夜国产va久久成人 | 91视频最新网址 | 日韩精品字幕 | 六月婷婷久香在线视频 | 就要干b | 久久精品亚洲综合专区 | 亚洲在线网址 | 天天操一操| 日本韩国精品一区二区在线观看 | 99视频在线 | 日韩xxxxxxxxx | 国产偷v国产偷∨精品视频 在线草 | 亚洲日本在线一区 | 久久国产精品久久精品国产演员表 | 欧美日韩高清一区二区 | 日韩综合色 | 欧美日韩综合在线观看 | 久久这里只有精品9 | 麻豆你懂的 | 91精品麻豆 | 日本韩国精品一区二区在线观看 | 国产在线一线 | 最近中文字幕mv免费高清在线 | 天天操天天吃 | 国产原创av在线 | 午夜精品久久久久久99热明星 | 亚洲精品乱码久久久久久蜜桃不爽 | 国产资源中文字幕 | 99riav1国产精品视频 | 日韩av片无码一区二区不卡电影 | 最新国产在线 | 国产精品视频区 | 四虎在线视频免费观看 | 国产精品mv在线观看 | 女人18片 | 国产亚洲精品无 | 国产精品日韩精品 | 天天操天天干天天操天天干 | 欧美精品午夜 | 视频 天天草 | 亚a在线 | 天天干夜夜夜操天 | 精品久久久久国产 | 天天天干天天射天天天操 | 久草在线视频首页 | 最新影院| 久久国产精品网站 | a天堂免费| 国产又粗又硬又爽的视频 | 日韩电影一区二区三区在线观看 | 伊人首页 | 色综合久久66 | 久久高清免费 | 色激情五月 | 日韩理论片在线观看 | 西西4444www大胆无视频 | 91九色蝌蚪视频在线 | 免费av网址大全 | 精品一二三四视频 | 色资源网在线观看 | av在线小说| 五月天开心 | 国产伦精品一区二区三区高清 | 国产高清在线观看av | 黄色一区三区 | 国产精品午夜在线观看 | 天天天天天天天天操 | 日本在线观看一区 | 免费的黄色的网站 | 日韩精品一区二区三区丰满 | 久久免费视频在线 | 人人爽人人干 | 久久免视频 | 成人观看 | 五月婷婷丁香在线观看 | 亚洲久草网 | 又爽又黄又无遮挡网站动态图 | 在线观看av黄色 | 精品久久精品 | 波多野结衣在线视频免费观看 | 久久免费在线观看视频 | 91精品久久久久久综合乱菊 | 在线不卡中文字幕播放 | 狠狠干天天 | 国产视频二 | 在线观看福利网站 | 97超碰人人澡 | 精品免费在线视频 | 国产精品不卡在线 | 日本精品一区二区三区在线观看 | 天天干天天操天天操 | 麻豆成人精品 | 色综合久久精品 | 久久九九九九 | 国产精品va | 亚洲天堂香蕉 | 亚洲永久在线 | 免费成人在线网站 | 四虎影视国产精品免费久久 | 在线视频电影 | 国产高清福利在线 | 亚洲高清视频在线播放 | 免费色av | 免费观看成人网 | 中文av日韩 | 91精品视频免费在线观看 | 中文字幕一区二区三区在线播放 | 久草99 | 青青久草在线视频 | 中文字幕在线观看第一区 | 91xav| 婷婷网站天天婷婷网站 | 人人爽人人爽人人片av免 | 天天操天天干天天爽 | 国产精品久久久久久婷婷天堂 | 久久不卡视频 | 天天干天天干天天色 | 麻豆国产网站 | 日韩成片 | 在线观看成人毛片 | 国产亚洲免费的视频看 | 午夜精品久久久久久久久久久久 | 国产特黄色片 | 久久99久久99精品免费看小说 | 国产资源中文字幕 | 久久精品视频在线免费观看 | 国产高清在线永久 | 成人h动漫在线看 | 久久综合久色欧美综合狠狠 | 六月丁香婷婷在线 | 在线观看亚洲成人 | 九九视频免费观看视频精品 | 四虎永久网站 | wwwwww黄| 免费看片网址 | 亚洲国产中文字幕 | 国产三级精品三级在线观看 | 伊人婷婷综合 | 久久成年人视频 | 在线v片免费观看视频 | 日韩高清免费在线 | 国产精品18久久久久久vr | 五月婷婷色综合 | 欧美极品少妇xbxb性爽爽视频 | 九九精品视频在线 | 91成人小视频 | 韩国av免费看 | 91视频中文字幕 | 99精品国产99久久久久久福利 | 国产亚洲片 | 国产高清精 | 黄色一级在线免费观看 | 日韩高清片 | 韩国精品福利一区二区三区 | 久久公开免费视频 | 国产精品久久久久影院 | 中文免费在线观看 | 免费黄色小网站 | 日韩欧美一区二区在线观看 | 国产精品va最新国产精品视频 | 一区二区亚洲精品 | 免费亚洲电影 | 国产精品 9999 | 亚洲艳情 | 在线视频日韩一区 | 伊人射 | 97av.com | 91av视频在线免费观看 | 亚洲区精品 | 中文字幕免费高清 | 久久久久久久久久久久影院 | 国产99在线免费 | 免费观看黄 | 欧美精品乱码99久久影院 | 看全黄大色黄大片 | 国产精品久久久久久久久久新婚 | 中文字幕乱码电影 | 综合影视 | 国产精品原创 | 最新日韩在线观看视频 | 五月婷婷在线观看视频 | 天天天干天天天操 | 国产福利在线不卡 | 91麻豆精品国产自产 | 美女国内精品自产拍在线播放 | av看片网| 人人搞人人爽 | 天天草夜夜 | 免费在线成人av电影 | 伊甸园永久入口www 99热 精品在线 | 亚洲无人区小视频 | 91爱在线| 国产一区免费 | 久久久免费高清视频 | 玖玖国产精品视频 | 色网站在线看 | 久久综合影视 | 亚洲日本一区二区在线 | 五月天视频网 | 在线观看小视频 | 亚洲精品成人免费 | 五月婷在线视频 | 婷婷色在线播放 | 亚洲视频 视频在线 | 国产午夜精品免费一区二区三区视频 | 国产亚洲精品中文字幕 | 国产一区欧美二区 | 91人人网 | 日韩专区一区二区 | 久久美女免费视频 | 最新av免费在线 | 免费日韩 精品中文字幕视频在线 | 在线免费观看av网站 | 精品一区二区电影 | 欧美一性一交一乱 | www久久久久 | 免费观看一级一片 | 91麻豆免费看 | 久久久99国产精品免费 | 91黄色免费看 | 在线激情网 | 成人黄色在线看 | 午夜精品一区二区国产 | 在线国产精品一区 | 欧美亚洲成人免费 | 黄色99视频| 欧美激情精品一区 | 美女视频黄,久久 | 亚洲高清色综合 | 欧美在线观看视频一区二区三区 | 99久久婷婷国产一区二区三区 | 天天夜夜亚洲 | 精品国产一区二区三区不卡 | 日韩欧美精品在线 | 夜夜爽天天爽 | 国产96在线 | 国产精品va在线播放 | 99热国产在线中文 | 日本丶国产丶欧美色综合 | 免费观看mv大片高清 | 97视频入口免费观看 | 成年人网站免费观看 | 久久久综合精品 | 91丨九色丨高潮 | 国产精品一区二区av影院萌芽 | 成年人国产精品 | 福利视频导航网址 | 国产精品毛片一区二区三区 | 特级西西人体444是什么意思 | 国产香蕉久久精品综合网 | 亚洲精品播放 | 久热香蕉视频 | 99久久精品免费一区 | 日本黄色黄网站 | 国产操在线 | aa一级片| 精品二区视频 | 国产亚洲精品bv在线观看 | 亚洲精品久久久久久久蜜桃 | 国内外成人在线视频 | 欧美男同网站 | 国产成人精品国内自产拍免费看 | 日本九九视频 | 国产无套精品久久久久久 | 国产精品久久久久久久久久直播 | 免费在线观看成人av | 国产精品久久久久9999 | 日韩电影在线看 | 国产91亚洲 | 99精品久久久久久久 | 国产精品 欧美 日韩 | 国产在线视频不卡 | 又大又硬又黄又爽视频在线观看 | 午夜国产一区二区三区四区 | 久久久久一区二区三区四区 | 国产黄色片免费观看 | 奇米网网址 | 色婷婷激情五月 | 91入口在线观看 | 天天干中文字幕 | 色开心| 人人看人人做人人澡 | 成人性生活大片 | 亚洲欧美国产精品18p | 香蕉手机在线 | 亚洲电影第一页av | 婷婷激情五月综合 | 免费精品国产va自在自线 | 久久99久久99精品免观看软件 | 日本精品视频网站 | 激情电影影院 | 欧美精品一区二区性色 | 一区二区视频在线观看免费 | 国产精品白丝jk白祙 | 欧美人人爱 | 欧美福利片在线观看 | 亚洲欧美在线视频免费 | 久草视频99 | 久亚洲| 亚洲欧美一区二区三区孕妇写真 | 日韩精品久久久久久久电影竹菊 | 国产免费高清视频 | 97看片| 91在线国内视频 | 手机在线看永久av片免费 | 午夜黄色大片 | 久久视频在线 | 在线观看久草 | 91av在线免费播放 | 在线免费试看 | 久久久久久久18 | 人成在线免费视频 | 在线视频麻豆 | 超碰在线97观看 | 国产剧情在线一区 | 91色一区二区三区 | 日韩色区| 在线观看视频中文字幕 | 精品中文字幕在线观看 | 亚洲日韩欧美一区二区在线 | 久久福利国产 | 中文字幕在线影院 | 日日夜夜精品 | 久久久国产影视 | 超碰在线公开 | 福利电影一区二区 | 麻花豆传媒mv在线观看 | 草久在线| 亚洲成av人片在线观看无 | 亚洲精品www久久久 www国产精品com | 激情视频在线观看网址 | 婷香五月| 91精品视频一区 | 国产精品igao视频网网址 | 亚洲成熟女人毛片在线 | 国产精品久久嫩一区二区免费 | 91手机电视 | 国产精品一区二区吃奶在线观看 | 国产日韩欧美视频在线观看 | 男女激情麻豆 | 在线视频 国产 日韩 | 国产精品 美女 | 操操操综合 | 久久精品一区二区三区视频 | 91视频麻豆| 亚洲三级在线 | 国产午夜精品一区二区三区 | 在线观看完整版免费 | 亚洲精品综合久久 | 婷婷成人在线 | 婷婷精品国产欧美精品亚洲人人爽 | 精品美女久久 | 日韩一级网站 | 日韩av线观看| 久草9视频 | 日韩二区三区在线 | 黄色国产成人 | 日日操日日插 | 91精品一区二区三区久久久久久 | 国产亚洲精品成人av久久ww | 九九热在线视频免费观看 | 天堂网一区 | 久久成人在线 | 五月天综合激情网 | 国产最新在线 | 日韩区视频 | 麻豆一区在线观看 | 狠狠色噜噜狠狠 | 亚洲国产经典视频 | 91黄视频在线 | 黄av免费在线观看 | 国产精品久久久久久久久久久免费 | 九九热国产视频 | 久久久久久久久久久久影院 | 国产又粗又猛又黄 | 久久国产精品影视 | 午夜影院日本 | 91久草视频 | 久久一级片 | 国产精品第二页 | 狠狠干狠狠久久 | av在线播放网址 | 91在线看网站 | 国产黄色精品网站 | 97人人超碰在线 | 三上悠亚在线免费 | 久久久国产一区二区三区四区小说 | 国产91精品一区二区绿帽 | 91超碰在线播放 | 国产最新在线观看 | 久久草在线视频国产 | 麻豆av一区二区三区在线观看 | 一级免费观看 | 久久在线免费视频 | 午夜电影 电影 | 97天堂 | 久久99精品国产99久久 | 黄网站色欧美视频 | 欧美激情精品久久久久久免费印度 | 成人毛片一区 | 免费观看一级一片 | 一级性视频 | 国产精品影音先锋 | 亚州精品成人 | 又色又爽又黄高潮的免费视频 | 国产原创av在线 | 日韩欧美一区二区三区在线 | 亚洲一区二区三区在线看 | 久久久精品久久 | 精品久久五月天 | 一本一本久久aa综合精品 | 亚洲成人av在线电影 | 97超在线 | 国产乱对白刺激视频在线观看女王 | 久久久久国产a免费观看rela | 98久久 | 福利网址在线观看 | 久久久久成人精品 | 色免费在线| 国产一区二区在线免费播放 | 黄色www免费 | 中文字幕免费在线看 | 成人黄色av网站 | 色综合天天在线 | 69性欧美| 色婷婷成人 | 日韩在线观看视频免费 | 97手机电影网 | 高清国产在线一区 | 最近中文字幕视频完整版 | 中文字幕一区二区三区四区在线视频 | 综合久色 | 天天综合网在线观看 | 国产精品一区二区久久精品爱微奶 | 国产精品丝袜 | 国产日女人 | 91干干干| 国产福利a| 99人久久精品视频最新地址 | 插插插色综合 | 久草电影在线观看 | 欧美一级特黄高清视频 | 在线观看中文字幕dvd播放 | 久久艹中文字幕 | 国产成人黄色片 | 色网站免费在线观看 | 中文字幕美女免费在线 | 免费69视频 | 九九热只有这里有精品 | 亚洲永久av | 伊人国产在线播放 | 国产香蕉97碰碰碰视频在线观看 | 欧美激情第一页xxx 午夜性福利 | 国内99视频| 免费看麻豆| 欧美一二三专区 | 国产手机av在线 | 婷婷丁香久久五月婷婷 | 超碰国产在线观看 | 一区二区中文字幕在线观看 | 最新一区二区三区 | 国产色女 | 亚洲欧洲精品一区二区 | 日韩精品一区二区三区免费视频观看 | 久草视频免费播放 | 久草在线视频在线观看 | 色狠狠久久av五月综合 | 能在线观看的日韩av | 欧美一级片免费观看 | 在线观看中文字幕第一页 | 四虎影视成人永久免费观看亚洲欧美 | 婷婷中文字幕在线观看 | 999成人精品| 国产高清在线视频 | 人人射人人爱 | 免费观看一级成人毛片 | 最新久久久 | 午夜精品在线看 | 91九色蝌蚪 | 精品国产一区二区三区久久 | 成人在线网站观看 | 午夜在线观看一区 | 久久久久亚洲a | 一区二区三区在线免费播放 | 在线网站黄| 黄色毛片一级片 | 97超级碰碰碰碰久久久久 | 精品免费久久久久 | 二区三区在线视频 | 久久久久久久久爱 | 欧美作爱视频 | 伊人热 | 国产r级在线观看 | 中文资源在线播放 | 免费在线观看av网站 | 一区二区视频在线播放 | 中文在线a在线 | 91大神视频网站 | 国产小视频免费观看 | 免费看三级 | 欧美福利视频一区 | 麻豆视频在线免费观看 | 婷婷丁香久久五月婷婷 | 亚洲五月婷婷 | 夜夜躁狠狠躁日日躁 | 中文字幕在线视频一区二区三区 | 美女视频永久黄网站免费观看国产 | 波多野结衣在线播放视频 | 国产精品成人一区二区 | 欧美日韩免费在线视频 | 午夜婷婷在线观看 | ,午夜性刺激免费看视频 | 久久精品女人毛片国产 | 国产18精品乱码免费看 | 日本精品久久久久中文字幕5 | 在线激情电影 | 97超碰精品 | 在线观看免费中文字幕 | 亚洲理论视频 | 久久av高清 | 久久久一本精品99久久精品66 | 成人午夜黄色影院 | 国产在线日本 | 激情久久伊人 | 日av免费 | 久久婷婷五月综合色丁香 | 99在线观看免费视频精品观看 | 五月天中文字幕mv在线 | 一本到视频在线观看 | 久久免费99 | 最新黄色av网址 | 午夜在线观看一区 | 在线小视频你懂的 | 91成人黄色 | 伊人婷婷在线 | 人人爱爱人人 | 婷婷激情久久 | 在线观看视频国产一区 | 五月的婷婷 | 国产精品va在线观看入 | 中文字幕资源网 国产 | 国产精品毛片一区二区 | 91av视频在线观看免费 | 国产精品专区在线 | 99精品视频免费 | 日本在线中文在线 | av一区二区在线观看中文字幕 | 中文字幕精品一区 | 开心色婷婷 | 91亚洲精品久久久中文字幕 | 亚洲欧美日韩国产一区二区 | 久久免费视频在线观看6 | 国产不卡免费视频 | 91大神精品视频 | 亚洲高清国产视频 | 国产麻豆剧传媒免费观看 | 亚洲无吗天堂 | 国产91精品一区二区麻豆亚洲 | 欧美99久久| 又粗又长又大又爽又黄少妇毛片 | 国产小视频在线观看免费 | 色婷婷狠狠五月综合天色拍 | 国产主播大尺度精品福利免费 | 亚洲一区日韩在线 | www.天天综合 | www五月| 国产精品一区二区三区久久久 | 视频在线观看一区 | 国产精品久久一区二区无卡 | 国产成人一区三区 | 欧美日韩不卡在线观看 | 黄色片免费看 | 国产美女被啪进深处喷白浆视频 | 成人性生交大片免费观看网站 | 久爱综合 | av短片在线| 在线看国产一区 | 天天色宗合 | 欧美亚洲国产一卡 | 亚洲精选视频在线 | 精品久久九九 | 久久 精品一区 | 开心激情婷婷 | 成人欧美一区二区三区在线观看 | 国产生活一级片 | wwxxxx日本 | 色综合久久久久综合99 | 97视频免费在线看 | 在线免费视频a | 最新日韩视频 | 精品久久久久久亚洲综合网站 | 九九涩涩av台湾日本热热 | 麻豆av电影| 四虎影视成人永久免费观看视频 | 免费黄在线观看 | 亚洲永久精品视频 | 免费看高清毛片 | 丁香六月伊人 | 日韩性色 | 国产成人精品一区二区三区网站观看 | 久久久久激情 | 国产精品久久二区 | 992tv在线观看网站 | 91精品久久久久久久99蜜桃 | 国产精品久久久久久久av电影 | 人人爽人人做 | 91成人蝌蚪| 中文字幕视频免费观看 | 久久精品视频国产 | 精品国产片 | 久久国产精品99国产精 | 午夜丁香网 | 日韩在观看线 | 日韩欧美xx | 国产小视频在线 | 亚洲综合一区二区精品导航 | www.久久精品视频 | 国产日产在线观看 | 97高清视频| 在线视频 你懂得 | 亚洲国产美女精品久久久久∴ | 久久久久久国产精品999 | 欧美日韩视频在线 | 国产麻豆精品免费视频 | 国产成人av网址 | 婷婷久操| 久草在线99 | 日韩毛片在线播放 | 国产精品11| 日韩欧美高清免费 | 99 精品 在线 | 五月婷婷播播 | 国产免费高清视频 | 国产精品破处视频 | 青青草在久久免费久久免费 | 国产精品毛片一区视频 | 视频二区在线 | 日韩av电影中文字幕 | 九九九九九九精品 | 久久久91精品国产一区二区三区 | 国产午夜精品一区二区三区在线观看 | 久久五月激情 | 色妞色视频一区二区三区四区 | 国产精品入口久久 | 国产高清视频在线播放一区 | 精品久久久久久亚洲 | 美女一二三区 | 一区二区三区视频 | 国产成人一区二区啪在线观看 | 日韩天天操 | 中文字幕视频一区二区 | 亚洲中字幕| 精品国产1区2区3区 国产欧美精品在线观看 | 成人福利在线 | 国产精品久久久久久久婷婷 | 九月婷婷色 | 综合色亚洲 | 狠狠色丁香久久婷婷综合五月 | 国产香蕉av | 国产精品日韩高清 | 在线a视频免费观看 | 成人毛片一区二区三区 | 欧美亚洲免费在线一区 | 色多多在线观看 | 一区二区三区四区精品 | 亚洲午夜精 | 五月天综合网 | 国产亚洲精品久久 | 九九九视频精品 | 国产精品毛片久久久久久久 | 久久综合狠狠综合 | 国产精品久久久久久99 | 中文字幕日本特黄aa毛片 | 国产不卡av在线 | 国内精品久久久久影院日本资源 | 在线观看日本高清mv视频 | 九九九九精品九九九九 | 丁香国产视频 | 日韩国产欧美视频 | 亚洲播放一区 | 久久久久久久久久久免费视频 | 国产综合在线观看视频 | 黄网站免费久久 | 色综合色综合久久综合频道88 | 一级特黄av | www.福利视频 | 日韩3区 | 亚洲专区欧美专区 | 国产一区在线免费 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产精品美女 | 久草热视频 | 久久精品一区二区国产 | 日本精品va在线观看 | 日韩免费一二三区 | 97精品国自产拍在线观看 | 成人国产精品 | 狠狠狠色丁香综合久久天下网 | 日韩精品视频在线免费观看 | 美女在线免费观看视频 | 国产小视频在线播放 | 天天射天天添 | 欧美日韩色婷婷 | 91成人短视频在线观看 | 在线观看网站你懂的 | 在线成人免费电影 | 999成人精品| www.午夜色.com | 久久久久女教师免费一区 | 亚洲精品国产区 | 黄色大片网 | 狠狠狠色丁香婷婷综合激情 | 超级碰碰碰免费视频 | 麻花豆传媒mv在线观看网站 | 国产资源 | 国产一区二区视频在线播放 | 成人免费网视频 | 狠狠躁日日躁狂躁夜夜躁 | 久久久久久久免费观看 | 91精品办公室少妇高潮对白 | 91九色蝌蚪在线 | 国产色在线 | 最新日本中文字幕 | 欧美精品黑人性xxxx | 国产成人亚洲在线观看 | 国产精品久久久久一区二区三区 | 狠狠色丁香婷综合久久 | 欧美日韩一区二区三区不卡 | 一二三精品视频 | 日日夜夜天天综合 | 一级黄毛片 | 国产精品9区 | 天天操综合网站 | 中文字幕在线人 | 亚洲精品久久在线 | 婷婷久久一区二区三区 | av一级在线观看 | 国产精品久久久久久久久久久久午夜片 | 天天色成人网 | 日本一区二区不卡高清 | 久久色在线观看 | 中文字幕一区三区 | 在线午夜电影神马影院 | 国产精品99久久久久久久久 | 成人午夜精品福利免费 | 国产婷婷精品av在线 | 天天干夜夜 | 天天摸天天舔天天操 | 久久综合九色综合久久久精品综合 | 69久久99精品久久久久婷婷 | 人人要人人澡人人爽人人dvd | 日韩精品不卡在线观看 | 色噜噜在线观看视频 | 精品久久久久久国产偷窥 | 日本中出在线观看 | 亚洲精品乱码久久久久久蜜桃动漫 | 九九九视频精品 | 69国产成人综合久久精品欧美 | 久久久黄色av | 久久久999精品视频 国产美女免费观看 | 日韩精品一区二区三区免费观看 | 亚洲好视频 | 色资源在线 | 国产免费一区二区三区网站免费 | 青草视频在线看 | 久久狠狠亚洲综合 | 欧美激情va永久在线播放 | av福利在线 | 亚州精品成人 | 国产特级毛片aaaaaa毛片 | 日本中文字幕在线一区 | 色婷婷久久一区二区 | 中文字幕丰满人伦在线 | 色资源网免费观看视频 | 涩av在线 | 91丨九色丨蝌蚪丨老版 | 精品 一区 在线 | 国产亚洲精品久久久久久 | 国产美女免费看 | 久草网在线观看 | 欧美一区二区在线看 | 91福利视频一区 | 亚洲国产精品激情在线观看 | 日韩视频1| 在线看不卡av | 亚洲天堂网站视频 | 精品免费视频. | 亚洲精品美女久久 | 一区二区欧美在线观看 | 国产精品久久久久久久久久久久午夜片 | 人人澡超碰碰97碰碰碰软件 | 久久经典国产视频 | 亚洲视频在线视频 | 欧美日韩精品免费观看视频 | 国产精品毛片一区二区在线看 | 天天操夜夜操夜夜操 |