日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

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

生活随笔

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

编程问答

使用多种MIME类型测试REST

發(fā)布時(shí)間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用多种MIME类型测试REST 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.概述

本文將重點(diǎn)介紹測(cè)試具有多種媒體類型/表示形式的RESTful服務(wù)。 這是關(guān)于使用Spring和基于Java的配置的Spring Security設(shè)置安全的RESTful Web Service的系列文章的第十篇。

REST with Spring系列:

  • 第1部分 – 使用Spring 3.1和基于Java的配置引導(dǎo)Web應(yīng)用程序
  • P藝術(shù)2 - 構(gòu)建RESTful Web服務(wù)使用Spring 3.1和Java配置
  • P藝術(shù)3 - 保護(hù)RESTful Web服務(wù)使用Spring Security 3.1
  • 第4部分 – RESTful Web服務(wù)可發(fā)現(xiàn)性
  • 第5部分 – 使用Spring進(jìn)行REST服務(wù)發(fā)現(xiàn)
  • 第6部分 – 使用Spring Security 3.1的RESTful服務(wù)的基本身份驗(yàn)證和摘要身份驗(yàn)證
  • 第7部分 – Spring的REST分頁(yè)
  • 第8部分 – 使用Spring Security對(duì)RESTful服務(wù)進(jìn)行身份驗(yàn)證
  • 第9部分 – 帶有Spring的REST的ETag

2.目標(biāo)

任何RESTful服務(wù)都需要使用某種媒體類型將其資源作為表示形式公開(kāi),并且在許多情況下,還需要多個(gè)媒體類型。 客戶端將設(shè)置Accept標(biāo)頭以選擇其從服務(wù)中請(qǐng)求的表示形式。 由于資源可以具有多種表示形式,因此服務(wù)器將必須實(shí)現(xiàn)負(fù)責(zé)選擇正確表示形式的機(jī)制-也稱為內(nèi)容協(xié)商。 因此,如果客戶端請(qǐng)求application / xml ,則它應(yīng)該獲得Resource的XML表示,如果客戶端請(qǐng)求application / json ,則應(yīng)該獲得JSON。

本文將說(shuō)明如何編寫(xiě)集成測(cè)試,該測(cè)試能夠在RESTful Service支持的多種表示形式之間切換。 目標(biāo)是能夠使用完全相同的服務(wù)URI運(yùn)行完全相同的測(cè)試,而只是要求使用不同的媒體類型。

3.測(cè)試基礎(chǔ)架構(gòu)

我們將從為編組人員定義一個(gè)簡(jiǎn)單的接口開(kāi)始–這將是允許測(cè)試在不同媒體類型之間切換的主要抽象:

public interface IMarshaller {...String getMime(); }

然后,我們需要一種基于某種形式的外部配置來(lái)初始化正確的編組器的方法。 對(duì)于這種機(jī)制,我們將使用Spring FactoryBean來(lái)初始化編組器,并使用一個(gè)簡(jiǎn)單的屬性來(lái)確定要使用的編組器:

@Component @Profile('test') public class TestMarshallerFactory implements FactoryBean<IMarshaller> {@Autowiredprivate Environment env;public IMarshaller getObject() {String testMime = env.getProperty('test.mime');if (testMime != null) {switch (testMime) {case 'json':return new JacksonMarshaller();case 'xml':return new XStreamMarshaller();default:throw new IllegalStateException();}}return new JacksonMarshaller();}public Class<IMarshaller> getObjectType() {return IMarshaller.class;}public boolean isSingleton() {return true;} }

讓我們來(lái)看一下:

  • 首先,在這里使用Spring 3.1中引入的新的Environment抽象-有關(guān)更多信息,請(qǐng)查看帶有Spring的屬性文章
  • 從環(huán)境中檢索test.mime屬性 ,并用于確定要?jiǎng)?chuàng)建哪個(gè)封送處理程序-一些Java 7在這里使用String語(yǔ)法
  • 接下來(lái),如果根本沒(méi)有定義該屬性,則默認(rèn)的marshaller將成為支持JSON的Jackson marshaller
  • 最后–此BeanFactory僅在測(cè)試場(chǎng)景中處于活動(dòng)狀態(tài),因?yàn)槭褂昧薙pring 3.1中引入的新@Profile支持

就是這樣–該機(jī)制能夠根據(jù)test.mime屬性的值在編組器之間進(jìn)行切換。

4. JSON和XML編組器

繼續(xù),我們將需要實(shí)際的marhsaller實(shí)施-每個(gè)受支持的媒體類型一個(gè)。

對(duì)于JSON,我們將使用Jackson作為基礎(chǔ)庫(kù):

public class JacksonMarshaller implements IMarshaller {private ObjectMapper objectMapper;public JacksonMarshaller() {super();objectMapper = new ObjectMapper();}...@Overridepublic String getMime() {return MediaType.APPLICATION_JSON.toString();} }

為了獲得XML支持,編組人員使??用XStream :

public class XStreamMarshaller implements IMarshaller {private XStream xstream;public XStreamMarshaller() {super();xstream = new XStream();}...public String getMime() {return MediaType.APPLICATION_XML.toString();} }

請(qǐng)注意,這些編組器未定義為它們自己的Spring組件。 原因是它們將由TestMarshallerFactory引導(dǎo)到Spring上下文中,因此不需要直接使它們成為組件。

5.同時(shí)使用JSON和XML來(lái)使用服務(wù)

在這一點(diǎn)上,我們應(yīng)該能夠?qū)σ巡渴鸬腞ESTful服務(wù)進(jìn)行全面的集成測(cè)試。 使用編組器很簡(jiǎn)單–將IMarshaller直接注入到測(cè)試中即可:

@ActiveProfiles({ 'test' }) public abstract class SomeRestLiveTest {@Autowiredprivate IMarshaller marshaller;// tests... }

當(dāng)然,Spring將注入的確切編組將由test.mime屬性的值確定 ; 這可以從屬性文件中獲取,也可以直接在測(cè)試環(huán)境中手動(dòng)設(shè)置。 但是,如果沒(méi)有為此屬性提供值,則TestMarshallerFactory將僅使用默認(rèn)的編組器JSON編組器。

6. Maven和詹金斯

如果將Maven設(shè)置為針對(duì)已部署的RESTful服務(wù)運(yùn)行集成測(cè)試,則可以這樣運(yùn)行:

mvn test -Dtest.mime=xml

或者,如果此構(gòu)建使用Maven生命周期的集成測(cè)試階段:

mvn integration-test -Dtest.mime=xml

有關(guān)如何使用這些階段,以及如何建立一個(gè)Maven構(gòu)建,使其應(yīng)用程序預(yù)集成測(cè)試目標(biāo)的部署約束,在集成測(cè)試目標(biāo),然后關(guān)運(yùn)行集成測(cè)試的詳細(xì)信息在post-integration-test中查看已部署的服務(wù),請(qǐng)參閱與Maven進(jìn)行集成測(cè)試 。

使用Jenkins時(shí) ,作業(yè)必須配置為:

This build is parameterized

并添加了String參數(shù) : test.mime = xml

常見(jiàn)的Jenkins配置是必須針對(duì)已部署的服務(wù)運(yùn)行運(yùn)行同一組集成測(cè)試的作業(yè)-一個(gè)使用XML,另一個(gè)使用JSON表示。

7.結(jié)論

本文介紹了如何正確測(cè)試REST API。 大多數(shù)API的確會(huì)以多種表示形式發(fā)布其資源,因此測(cè)試所有這些表示形式至關(guān)重要,因此使用完全相同的測(cè)試非常酷。

要在實(shí)際集成測(cè)試中全面驗(yàn)證此機(jī)制,以驗(yàn)證所有資源的XML和JSON表示,請(qǐng)查看github項(xiàng)目 。

參考:來(lái)自baeldung博客的JCG合作伙伴 Eugen Paraschiv對(duì)具有多種MIME類型的REST進(jìn)行了測(cè)試 。

翻譯自: https://www.javacodegeeks.com/2013/01/testing-rest-with-multiple-mime-types.html

總結(jié)

以上是生活随笔為你收集整理的使用多种MIME类型测试REST的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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