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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

使用外星人进行测试:如何使用Arquillian测试JPA类型转换器

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用外星人进行测试:如何使用Arquillian测试JPA类型转换器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

該帖子與+ Aslak Knutsen ( @aslakknutsen )一起撰寫。

JPA類型轉換器為定義實體屬性如何持久存儲到數據庫提供了一種簡便的方法。 您可以使用它們來實現許多不同的功能,例如,如上一篇文章中所示:加密數據: 如何使用JPA Type Converter加密數據 。

但是編寫類型轉換器還不夠。 我們還需要確保其正常運行。

通常,有兩種方法可以測試類型轉換器。 我們可以編寫一個單元測試來檢查轉換是否正常工作。 但是單元測試不會對隔離的類進行測試,而無需將其放入實際的執行環境中。 這意味著我們仍然不知道轉換器是否可以在我們的應用程序之一中工作。 如果一切設置正確,則持久性提供程序將在寫入數據庫和從數據庫讀取之后調用轉換器。 因此,我們還需要檢查持久性提供程序是否調用了類型轉換器,以及在這種情況下一切是否正常。 我們需要在要用于我們的應用程序的容器內測試轉換器。

我們將看看如何使用Arquillian及其持久性擴展來完成此任務。

關于Arqillian

如果您已經熟悉Arquillian,則可以跳過此部分。 對于到目前為止從未與Arquillian合作的所有人,我只想提供一些基本信息。 您可以在《 Arquillian 入門指南》中找到更詳細的描述。

Arquillian是用于容器測試的測試框架。 想法是不要模擬您要使用的容器,而是在其中測試您的代碼。 這提供了一個優勢,即您可以測試代碼是否還可以在執行環境中工作,而不僅是在模擬測試場景中也可以工作。 Arquillian提供了許多功能來管理容器,注入所需的資源(如EJB或EntityManager),并使您的工作變得更加輕松。

Arquillian測試由junit執行。 這很棒,因為您可以在可以執行junit測試的任何地方使用它們。 這意味著在您的IDE中,作為構建過程的一部分,您可以在CI服務器上的任何地方。

被測對象

下面的代碼片段顯示了此示例中的測試對象。 它是一個類型轉換器,用于加密和解密String屬性。 在寫入數據庫和從數據庫讀取之后,持久性提供程序將調用轉換器。 如果您想了解有關此類型轉換器如何工作的更多信息,請查看我的相關文章 。

@Converter public class CryptoConverter implements AttributeConverter<String, String> {private static final String ALGORITHM = "AES/ECB/PKCS5Padding";private static final byte[] KEY = "MySuperSecretKey".getBytes();@Overridepublic String convertToDatabaseColumn(String ccNumber) {// do some encryptionKey key = new SecretKeySpec(KEY, "AES");try {Cipher c = Cipher.getInstance(ALGORITHM);c.init(Cipher.ENCRYPT_MODE, key);return Base64.encodeBytes(c.doFinal(ccNumber.getBytes()));} catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic String convertToEntityAttribute(String dbData) {// do some decryptionKey key = new SecretKeySpec(KEY, "AES");try {Cipher c = Cipher.getInstance(ALGORITHM);c.init(Cipher.DECRYPT_MODE, key);return new String(c.doFinal(Base64.decode(dbData)));} catch (Exception e) {throw new RuntimeException(e);}} }

設定

在開始編寫測試之前,我們需要定義一些依賴關系。 我將僅展示如何配置此示例所需的依賴項。 如果您尚未為項目設置Arquillian測試,則必須做更多的工作。 請查看“ 入門指南”以了解如何為您的項目設置Arquillian。 不要害怕,沒有太多的事情要做。

如下面的代碼片段所示,我們將使用JUnit 4.11 , Arquillian 1.1.3.Final , Arquillian Persistence Extension 1.0.0.Alpha7和WildFly Application Server 8.1.0.Final 。

<?xml version="1.0" encoding="UTF-8"?> <projectxsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">...<properties><version.junit>4.11</version.junit><version.arquillian>1.1.3.Final</version.arquillian><version.arquillian_persistence>1.0.0.Alpha7</version.arquillian_persistence><version.wildfly>8.1.0.Final</version.wildfly></properties><dependencyManagement><dependencies>...<dependency><groupId>org.jboss.arquillian</groupId><artifactId>arquillian-bom</artifactId><version>${version.arquillian}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies>...<dependency><groupId>javax.enterprise</groupId><artifactId>cdi-api</artifactId><scope>provided</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${version.junit}</version><scope>test</scope></dependency><dependency><groupId>org.jboss.arquillian.junit</groupId><artifactId>arquillian-junit-container</artifactId><scope>test</scope></dependency><dependency><groupId>org.jboss.arquillian.extension</groupId><artifactId>arquillian-persistence-dbunit</artifactId><version>${version.arquillian_persistence}</version><scope>test</scope></dependency></dependencies>

編寫測試

要設置測試環境,我們需要做兩件事。 首先,我們需要告訴junit該測試應作為junit測試執行。 這是通過@RunWith(Arquillian.class) 。

此外,我們需要創建測試部署,該部署將部署到容器中。 因此,我們需要實現至少一種方法,并使用@Deployment對其進行@Deployment 。 正如您在以下代碼片段中所看到的,我們使用ShrinkWrap創建jar存檔部署。 存檔包含CreditCard實體, CryptoConverter類型轉換器和測試類。 無需包括任何實現業務邏輯的EJB或其他類。 我們可以將EntityManager注入我們的測試用例中,并直接使用它來持久化和讀取實體。 稍后我們將對其進行更詳細的介紹。

另外,我們需要添加一些清單資源來創建一個持久性單元,注冊類型轉換器并添加一個空的beans.xml來激活CDI。 請查看入門指南,以獲取有關ShrinkWrap和創建部署的更多信息。

@RunWith(Arquillian.class) public class TestCryptoConverter {@Deploymentpublic static JavaArchive createDeployment() {return ShrinkWrap.create(JavaArchive.class).addClasses(CreditCard.class, CryptoConverter.class,TestCryptoConverter.class).addAsManifestResource("META-INF/persistence.xml","persistence.xml").addAsManifestResource("META-INF/orm.xml", "orm.xml").addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");}

完成之后,我們可以開始編寫測試用例。 首先,我們將保留一個CreditCard實體并檢查信用卡號是否已由CryptoConverter加密。 因此,我們注入EntityManager,創建一個CreditCard實體,并將其傳遞給EntityManager的persist方法。 持久化數據的驗證由Arquillian持久性擴展完成。 我們只需要定義我們希望寫入數據庫的數據即可。 預期數據在cc.yml文件中定義,該文件在@ShouldMatchDataSet批注中引用。 由于id屬性是由數據庫生成的,因此我們希望將其從驗證中排除。 這可以通過在注釋的excludeColumns屬性中引用它來完成。

@PersistenceContextprivate EntityManager em;@Test@ShouldMatchDataSet(value = "data/cc.yml", excludeColumns = "id")public void testEncryption() {CreditCard cc = new CreditCard();cc.setName("My Name");cc.setCcNumber("123456789");this.em.persist(cc);}

cc.yml包含以下信息。

CreditCard:- id: 1name: My NameccNumber: egFfkhd8cRh82tvsh3VVUg==

在第二個測試中,我們將檢查是否可以在數據庫中搜索具有給定信用卡號的CreditCard實體。 因此,我們使用@UsingDataSet批注為cc.yml文件中定義的數據播種數據庫。 現在,我們可以使用注入的EntityManager調用命名查詢,以使用給定的編號搜索CreditCard實體。

@Test@UsingDataSet("data/cc.yml")public void testRead() {CreditCard cc = this.em.createNamedQuery(CreditCard.BY_NUMBER, CreditCard.class).setParameter("number", "123456789").getSingleResult();Assert.assertEquals("My Name", cc.getName());}

結論

我們使用Arquillian和Arquillian Persistence擴展來測試JPA類型轉換器。 因此,我們注入了EntityManager并使用了@ShouldMatchData和@UsingDataSet批注來驗證數據庫并使用yml文件設置種子。

如果您想自己嘗試,可以在github上找到源代碼。
您可以通過調用以下命令來運行它:git clone https://github.com/thjanssen/JPA2.1.git && cd JPA2.1 / CryptoConverter && mvn測試。

使用Arquillian測試Java EE應用程序有什么經驗? 請對此發表評論。
想要了解有關Arquillian的更多信息,請參閱Arquillian Guides: http ://arquillian.org/guides/

翻譯自: https://www.javacodegeeks.com/2014/06/testing-with-aliens-how-to-test-a-jpa-type-converter-with-arquillian.html

總結

以上是生活随笔為你收集整理的使用外星人进行测试:如何使用Arquillian测试JPA类型转换器的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美午夜一区二区 | 少妇色| 黄色av观看| av丝袜在线观看 | 欧美特黄aaaaaa | 一区二区三区高清在线观看 | 伊人啪啪网 | www.久热 | 中文区中文字幕免费看 | 可以看的av网站 | 欧美在线视频一区二区三区 | 丁香色网| 日韩欧美一区二区三区四区五区 | 丰满少妇一区二区三区专区 | 亚洲一区二区三 | 99久久国产热无码精品免费 | 六月婷婷七月丁香 | 亚洲图片偷拍区 | 国产污视频在线 | 国产一卡二卡三卡四卡 | 国产欧美日韩一区 | 国产欧美日韩二区 | 久热网站| 美女扒开粉嫩的尿囗给男生桶 | 精品网站| 最新中文字幕久久 | 伊人毛片 | 啪啪网站免费 | 美女一区二区三区四区 | 日本高清不卡视频 | 岛国二区三区 | 国产伦精品一区二区三区视频网站 | 久热最新 | 一区二区久久 | 国产偷人妻精品一区二区在线 | 亚洲精品乱码久久久久久蜜桃欧美 | 中国挤奶哺乳午夜片 | 亚洲中文字幕无码一区 | 欧美日韩视频一区二区 | 成人首页 | 国产91边播边对白在线 | 国产吞精囗交久久久 | 日朝毛片 | 日本免费在线观看视频 | 欧美二区在线观看 | 不卡av一区二区 | 国产精品成人国产乱一区 | 久久黄色av | 久久久久久久久久久福利 | 国产天天综合 | 精品无码成人久久久久久免费 | 国产精品一区二区三区不卡 | 欧美性猛交xxxx偷拍洗澡 | 亚洲精品久久久久久无码色欲四季 | 中文字幕第一页在线播放 | 尤物视频在线观看免费 | 在线观看免费毛片 | 久久久久久天堂 | 亚洲免费网站 | 九九热这里只有精品6 | 国产剧情在线视频 | 国产高清在线观看视频 | 91极品蜜桃臀 | 四虎影视在线播放 | 欧美一区网站 | 亚洲天堂网在线观看视频 | 草逼视频免费看 | 伊人66| 欧美国产日韩在线视频 | 熟女国产精品一区二区三 | 日韩精品一区二区在线 | 国产欧美精品一区二区 | 国产精品免费一区二区区 | 三级亚洲 | 亚洲欧洲无码一区二区三区 | xxxx精品 | 成人毛片18女人毛片 | 视色影视 | 免费在线看视频 | 日韩精品国产AV | 欧美三区在线 | 夜夜夜夜爽| 四虎影库在线播放 | 亚洲xxxxx| 国产精品久久久久久福利 | 国产男女猛烈无遮挡免费视频动漫 | 噼里啪啦动漫高清在线观看 | 波多野结衣一二三区 | 久久久久亚洲av无码专区桃色 | 日本变态折磨凌虐bdsm在线 | 伊人99热| 激情婷婷网 | 色羞羞 | 亚洲综合站 | 亚洲制服丝袜在线播放 | 国产又大又粗又爽的毛片 | 三上悠亚一区二区在线观看 | av导航站| 亚洲s码欧洲m码国产av |