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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

osgi:install_OSGi服务测试助手:ServiceRegistrationRule

發(fā)布時(shí)間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 osgi:install_OSGi服务测试助手:ServiceRegistrationRule 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

osgi:install

OSGi服務(wù)測(cè)試可以是避免與懸掛的服務(wù)引用有關(guān)的問題的有效方法。 就像我在寫簡單服務(wù)貢獻(xiàn)驗(yàn)證中所承諾的那樣,這次我引入了一個(gè)JUnit規(guī)則 ,該規(guī)則有助于測(cè)試組件之間的交互。

OSGi服務(wù)測(cè)試組件交互

假設(shè)我們有一個(gè)服務(wù),該服務(wù)通知根據(jù)whiteboard-pattern綁定的相關(guān)觀察者。 就像上一篇文章中一樣,我們ServiceImpl有一個(gè)Service聲明和ServiceImpl 。 另外,我們支持ServiceListener ,應(yīng)在特定操作時(shí)通知此服務(wù)。

為了表示這樣的動(dòng)作,我們使用名為Service#execute()的方法聲明來擴(kuò)展示例的服務(wù)接口:

public interface Service {void execute(); }

除了實(shí)現(xiàn)此execute方法之外,貢獻(xiàn)類還必須提供綁定和取消綁定ServiceListener引用的功能:

public class ServiceImplimplements Service {public void execute() {[...]}public void bind( ServiceListener listener ) {[...]}public void unbind( ServiceListener listener ) {[...]} }

作為通知目的地,回調(diào)類型ServiceListener提供了一個(gè)稱為ServiceListener#executed()的方法聲明:

public interface ServiceListener {void executed(); }

要完成設(shè)置,我們必須注冊(cè)服務(wù)組件,我們將通過聲明式服務(wù)再次進(jìn)行此操作。 請(qǐng)注意附加的0..n參考聲明:

<?xml version="1.0" encoding="UTF-8"?> <scr:componentxmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"immediate="true" name="Implementation of Service API"><implementation class="com.codeaffine.example.core.ServiceImpl"/><service<<provide interface="com.codeaffine.example.api.Service"/></service><reference bind="bind" unbind="unbind"cardinality="0..n"interface="com.codeaffine.example.api.ServiceListener"name="ServiceListener"policy="dynamic" /> </scr:component>

現(xiàn)在的問題是:我們?nèi)绾螠y(cè)試偵聽器的取消綁定是否正確工作以及按預(yù)期方式分發(fā)通知? 基本思想是注冊(cè)一個(gè)ServiceListener 間諜并在實(shí)際的服務(wù)實(shí)現(xiàn)上觸發(fā)Service#execute 。

間諜記錄了要execute調(diào)用,并允許驗(yàn)證綁定和通知是否按預(yù)期工作。 一旦確定了這一點(diǎn),我們就可以繼續(xù)進(jìn)行注冊(cè)并注銷主要注冊(cè)的間諜,并驗(yàn)證是否沒有收到有關(guān)后續(xù)操作事件的通知。 這樣可以確保解除綁定也按計(jì)劃進(jìn)行。

但是,這種情況下的測(cè)試夾具通常需要一點(diǎn)OSGi樣板。 為了減少混亂,我編寫了一個(gè)小的JUnit規(guī)則,該規(guī)則可以簡化服務(wù)注冊(cè)并在每次測(cè)試運(yùn)行后自動(dòng)執(zhí)行服務(wù)注冊(cè)表清理。

服務(wù)注冊(cè)規(guī)則

與其他所有JUnit TestRule ,必須在我們的PDE測(cè)試 TestRule ServiceRegistrationRule作為公共字段提供。 注意給定測(cè)試用例的類實(shí)例,規(guī)則如何使用參數(shù)化的構(gòu)造函數(shù)。 此引用用于獲取適當(dāng)?shù)腂undleContext用于服務(wù)注銷/注冊(cè)。

@Rule public final ServiceRegistrationRule serviceRegistration= new ServiceRegistrationRule( getClass() );private ServiceListener listener; private Service service;@Before public void setUp() {service = collectServices( Service.class, ServiceImpl.class ).get( 0 );listener = mock( ServiceListener.class ); }

隱式測(cè)試設(shè)置使用我在上 ServiceCollector介紹的ServiceCollector檢索正在測(cè)試的注冊(cè)服務(wù) 。 使用mockito將偵聽器DOC創(chuàng)建為間諜。 上述第一個(gè)測(cè)試方案如下所示:

@Test public void executeNotification() {serviceRegistration.register( ServiceListener.class, listener );service.execute();verify( listener ).executed(); }

很簡單,不是嗎?

請(qǐng)注意, ServiceRegistrationRule負(fù)責(zé)清理并從服務(wù)注冊(cè)表中刪除間諜服務(wù)。 為了便于測(cè)試解除綁定的情況,規(guī)則的register方法返回服務(wù)注冊(cè)的句柄:

@Test public void executeAfterListenerRemoval() {Registration registration= serviceRegistration.register( ServiceListener.class, listener );registration.unregister();service.execute();verify( listener, never() ).executed(); }

第五行( registration.unregister() )從服務(wù)注冊(cè)表中刪除偵聽器間諜。 這將觸發(fā)解除綁定,并且永遠(yuǎn)不會(huì)調(diào)用偵聽器。 當(dāng)然,現(xiàn)實(shí)世界中的場(chǎng)景可以為多個(gè)偵聽器注冊(cè),異常處理等添加其他測(cè)試,但是我認(rèn)為這個(gè)概念已經(jīng)明確了。

結(jié)論

到目前為止, ServiceRegistrationRule在我們當(dāng)前的項(xiàng)目中證明了自己的作用。 它大大減少了樣板,使測(cè)試更清潔并提高了可讀性。 該類是Xiliary P2存儲(chǔ)庫的com.codeaffine.osgi.test.util功能的一部分: http ://fappel.github.io/xiliary

如果您想查看代碼或提出問題,也可以查看Xiliary GitHub項(xiàng)目: https : //github.com/fappel/xiliary

對(duì)于其他所有內(nèi)容,請(qǐng)隨時(shí)使用下面的評(píng)論部分。 在后續(xù)文章中,我將說明如何使用集成的PDE-Tes??ts來設(shè)置Maven-tycho構(gòu)建。 這有點(diǎn)棘手,因?yàn)閠ycho不允許訪問當(dāng)前React堆構(gòu)建的束,因此請(qǐng)繼續(xù)關(guān)注。

翻譯自: https://www.javacodegeeks.com/2015/02/osgi-service-test-helper-serviceregistrationrule.html

osgi:install

總結(jié)

以上是生活随笔為你收集整理的osgi:install_OSGi服务测试助手:ServiceRegistrationRule的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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