2010-07-08 20 views
2

Résolu. IntelliJ n'a pas souligné le fait que mes importations étaient incomplètes.Scala problème avec les attentes jMock et renvoyer une valeur de faux

Salut,

J'ai un programme simple Scala que je suis en train de développer en utilisant jMock. Définir les attentes de base fonctionne bien, mais pour une raison quelconque, Scala ne comprend pas ma tentative de retourner une valeur à partir d'un objet simulé. Mon build Maven vomit l'erreur suivante

TestLocalCollector.scala:45: error: not found: value returnValue 
one (nodeCtx).getParameter("FilenameRegex"); will(returnValue(regex)) 
               ^

Et les extraits de code respectifs sont

@Before def setUp() : Unit = { nodeCtx = context.mock(classOf[NodeContext]) } 
... 
// the value to be returned 
val regex = ".*\\.data" 
... 
// setting the expectations 
one (nodeCtx).getParameter("FilenameRegex"); will(returnValue(regex)) 

Pour moi, il semble que Scala attend que la méthode jMock statique returnValue serait un val? Qu'est-ce que j'oublie ici?

+0

Pouvez-vous laisser dans le commentaire la bonne syntaxe que vous avez utilisée? Je vais l'inclure dans ma réponse ci-dessous. – VonC

+0

Voici les parties pertinentes, la méthode statique 'returnValue' n'était pas visible, donc les erreurs. Et la méthode 'will' enregistre juste une action sur la dernière opération fictive, c'est pourquoi elle peut être sur la ligne suivante ou après le point-virgule :) import org.jmock.Expectations import org.jmock.Expectations._ . .. context.checking (nouvelles attentes {{ oneOf (nodeCtx) .getParameter ("FilenameRegex") sera (returnValue ("* \\. données")) }}) – puudeli

+0

merci. Un problème de portée alors. Avec les bonnes importations, cela fonctionne mieux. Réponse mise à jour – VonC

Répondre

2

Êtes-vous sûr de ';'?

one (nodeCtx).getParameter("FilenameRegex") will(returnValue(regex)) 

peut fonctionner mieux.

En this example vous voyez une ligne comme:

expect { 
    one(blogger).todayPosts will returnValue(List(Post("..."))) 
    } 

avec le commentaire suivant:

Specify what the return value should be in the same expression by defining "will" as Scala infix operator.
In the Java equivalent we would have to make a separate method call (which our favorite IDE may insist on putting on the next line!)

one(blogger).todayPosts; will(returnValue(List(Post("...")))) 
         ^
         | 
         -- semicolon only in the *Java* version 

L'OP explique lui-même:

the returnValue static method was not visible, thus the errors.
And the will method just records an action on the latest mock operation, that's why it can be on the next line or after the semicolon :)

import org.jmock.Expectations 
import org.jmock.Expectations._ 
... 
context.checking( 
    new Expectations { 
    { oneOf (nodeCtx).getParameter("FilenameRegex") will(returnValue(".*\\.data")) } 
    } 
) 
+0

Hmm, le point-virgule était un reste, supprimé, mais maintenant je reçois cette erreur: la valeur ne sera pas un membre de java.lang.String – puudeli

+0

@puudeli: c'est normal, 'will' accepte une action jMock, comme returnValue. Pas une chaîne. – VonC

+0

l'erreur identifie l'objet fantaisie: 'une (nodeCtx) .getParameter ("FilenameRegex") sera returnValue (regex)' la méthode 'getParameter' renvoie une chaîne, de sorte que le compilateur scala attache' will' à la ret val – puudeli