2012-06-03 24 views
7

के लिए मजाक उड़ाता है मैं एक वर्ग है, जहां मैं इसे (माना statActor) अभिनेता को संदेश भेजता है कि जांच करने की आवश्यकता के लिए एक स्पॉक परीक्षण बनाने के लिए कोशिश की है। मुझे पता है कि अक्का के पास एकीकरण परीक्षण के लिए विशेष पुस्तकालय है, लेकिन ऐसा लगता है कि यह बहुत ही सरल परीक्षण के लिए बहुत अधिक है। तो, मैं कोशिश की है:स्पॉक अक्का के ActorRef

setup: 
def myActor = Mock(ActorRef) 
myService.statActor = myActor 
when: 
myService.startStats() 
then: 
1 * myActor.tell(_) 

लक्ष्य विधि की तरह दिखता है:

void startStats() { 
    Date x = null 
    // prepare some data, fill x with required value 
    this.statActor.tell(x) 
} 

मैंने सोचा था कि स्पॉक एक विधि tell साथ नकली पैदा करेगा। लेकिन इस परीक्षण चलाने के बाद मैं हो रही है:

java.lang.ClassCastException: akka.actor.ActorRef$$EnhancerByCGLIB$$80b97938 cannot be cast to akka.actor.ScalaActorRef 
    at akka.actor.ActorRef.tell(ActorRef.scala:95) 
    at com.example.MyService.startStats(MyService.groovy:32) 

क्यों यह असली ActorRef कार्यान्वयन कॉल कर रहा है? स्कैला के साथ कुछ तरह की असंगतता? क्या इस तरह के वर्ग के लिए नकली बनाने का कोई तरीका है?

+1

"लेकिन लगता है कि यह बहुत ही साधारण परीक्षण के लिए बहुत ज्यादा है" <- मैं पूछ सकता है कि कैसे इस निष्कर्ष किया जाता है, विशेष रूप से विचार कर रहा है कि ठट्ठा करके आप ऐसा नहीं हो पाया की कोशिश की है? –

+0

@ विकटोरक्लंग क्योंकि एक पंक्ति 'डीफ अभिनेता = मॉक (एक्टोररफ)' कम है कि 'टेस्टकिट' के लिए आवश्यक कुछ दर्जन लाइनें हैं। मेरा मतलब है कि यह अन्य वस्तुओं के लिए नकली बना सकता है, ठीक काम करता है और –

+0

@paradigmatic हाँ का उपयोग करने में वास्तव में आसान है, मुझे पता है। शायद मैं कड़ी सवाल पूछ रहा हूं, लेकिन मैं यहां क्या कर सकता हूं? :( –

उत्तर

16

केवल समर्थित एक ActorRef उपहास करने के लिए जिस तरह से एक TestProbe बनाने के द्वारा है:

// "system" is an ActorSystem 
final TestProbe probe = TestProbe.apply(system); 
final ActorRef mock = probe.ref; 

यह आसान या इस से अधिक आसान नहीं मिलता है।

+0

धन्यवाद। मैं कैसे परीक्षण कर सकता हूं कि इस अभिनेता के लिए '.ell()' कहा जाता है, एक मूल्य के साथ मैं भी परीक्षण कर सकता हूं? –

+0

http: // पर सूचीबद्ध एक जांच पर संदेश स्वागत करने के लिए कई तरीके हैं। /doc.akka.io/api/akka/2.0/akka/testkit/TestProbe.html – paradigmatic

+0

ओह, मुझे यकीन है कि यह 'के रूप में TestActorRef' –

0

specs2 में आप कर सकते हैं:

val mockedActorRef = spy(TestProbe().ref) 

फिर सामान्य की तरह उपयोग करें।