2017-01-01 6 views
5

मैं निम्नलिखित Subscriber सार आधार वर्ग है:मैं अक्का क्लस्टर में सब्सक्राइबर की प्राप्त विधि का परीक्षण कैसे कर सकता हूं?

abstract class Subscriber(topics: Seq[String]) extends Actor with ActorLogging { 
    import DistributedPubSubMediator.{ Subscribe, SubscribeAck } 

    val mediator = DistributedPubSub(context.system).mediator 

    // subscribe to each topic 
    topics.foreach{mediator ! Subscribe(_, self)} 

    def receive = { 
    case SubscribeAck(Subscribe(name, None, `self`)) ⇒ 
     log.info(s"Subscribing to $name") 
    } 
} 

और मैं परीक्षण करने के लिए है कि यह संदेश जो जो करने के लिए एक उपवर्ग सदस्यता लिया है विषयों के लिए प्रकाशित कर रहे हैं प्राप्त करता है चाहते हैं।

val topic = "foo" 

class FooSubscriber extends Subscriber(Seq(topic)) 

val fooSubActor = system.actorOf(Props[FooSubscriber])  
val mediator = DistributedPubSub(system).mediator 
val msg = "This is a string" 

// Publish the msg to the "foo" topic. 
mediator ! Publish(topic, msg) 

fooSubActor.expectMsg(msg) 

एक ही रास्ता मैं संदेशों विशिष्ट अभिनेताओं प्राप्त होने वाले TestProbe के माध्यम से है के बारे में दावे बनाने के लिए पता है, लेकिन मैं नहीं जानता कि मैं कैसे एक TestProbe का विस्तार कर सकता है: कुछ सरल स्यूडोकोड कि कि यह दर्शाता है निम्नलिखित है मेरी कक्षा।

आम तौर पर अक्का docs में संबंधित परीक्षण सूट के साथ नमूना कोड का भार होता है, लेकिन मुझे receive विधि का परीक्षण करने से संबंधित अक्का क्लस्टर दस्तावेज़ों में कुछ भी नहीं मिला।

क्या किसी के पास सुझाव हैं?

+0

एक क्लज 'प्राप्त' को ओवरराइड करना है और जब सदस्य को कुछ भी प्राप्त होता है और एक दावा करता है कि सदस्य चर मेरे परीक्षण में सेट है ... लेकिन यह बुरा है। एक और बेवकूफ परीक्षण दृष्टिकोण की तलाश में। – erip

उत्तर

0

यह एक पाठ्यपुस्तक उदाहरण है जहां निर्भरता इंजेक्शन टेस्टेबिलिटी के साथ मदद करता है।

यदि आप सीधे पूछने के बजाय सब्सक्राइबर कन्स्ट्रक्टर में DistPubSub के लिए मध्यस्थ प्राप्त करते हैं तो आप अपने परीक्षण स्थिरता के हिस्से के रूप में DistPubSub का उपयोग करने के बिना, अलगाव में Suscriber अभिनेता का परीक्षण कर सकते हैं।

+0

मध्यस्थ समस्या नहीं है - मुद्दा ग्राहक में संदेश प्राप्त करने की अपेक्षा है। – erip

+1

लेकिन उस स्थिति में आप केवल वास्तव में PubSub एक्सटेंशन का परीक्षण कर रहे हैं और आपके अभिनेता – emilianogc

+0

का तर्क नहीं है। शायद आप मेरे प्रश्न को नहीं समझते - मैं अपने अभिनेता के तर्क का परीक्षण करने की कोशिश कर रहा हूं। मध्यस्थ ग्राहक को स्वतंत्र करता है, यही कारण है कि आप पहले से ही 'पबसुब' का उपयोग करेंगे - जो कि जरूरी है कि कौन सा प्रकाशन प्रकाशित कर रहा है, उसका ट्रैक रखने के लिए। – erip

संबंधित मुद्दे