Skip to content

Commit 0ceac6a

Browse files
authored
Fix Bug #216 (#218)
1 parent 49e6d1d commit 0ceac6a

File tree

3 files changed

+38
-15
lines changed

3 files changed

+38
-15
lines changed

common/src/main/scala/org/mockito/MockitoAPI.scala

+4-2
Original file line numberDiff line numberDiff line change
@@ -595,8 +595,10 @@ private[mockito] trait MockitoEnhancer extends MockCreator {
595595
case m: AnyRef if MockUtil.isMock(m) =>
596596
ignoreDefaultArguments(m)
597597
Mockito.verifyNoMoreInteractions(m)
598-
case t: Iterable[_] => verifyNoMoreInteractions(t)
599-
case _ => notAMockPassedToVerifyNoMoreInteractions
598+
case t: Array[AnyRef] =>
599+
verifyNoMoreInteractions(t: _*)
600+
case _ =>
601+
throw notAMockPassedToVerifyNoMoreInteractions
600602
}
601603
}
602604

macro/src/main/scala/org/mockito/VerifyMacro.scala

+17-13
Original file line numberDiff line numberDiff line change
@@ -90,34 +90,38 @@ private[mockito] trait VerificationMacroTransformer {
9090
} else throw new Exception(s"Couldn't recognize invocation ${show(invocation)}")
9191
}
9292

93-
protected def transformMockWasNeverCalled[T: c.WeakTypeTag, R](c: blackbox.Context)(obj: c.Tree, called: c.Tree): c.Tree = {
94-
import c.universe._
95-
called match {
96-
case q"$_.called" => q"verification(_root_.org.mockito.MockitoSugar.verifyZeroInteractions($obj))"
97-
case q"$_.calledAgain" => q"verification(_root_.org.mockito.MockitoSugar.verifyNoMoreInteractions($obj))"
98-
case q"$_.calledAgain.apply($_.ignoringStubs)" =>
99-
q"verification(_root_.org.mockito.MockitoSugar.verifyNoMoreInteractions(_root_.org.mockito.MockitoSugar.ignoreStubs($obj): _*))"
100-
}
101-
}
102-
10393
protected def transformVerification[T: c.WeakTypeTag, R](c: blackbox.Context)(called: c.Tree): c.Tree = {
10494
import c.universe._
10595

96+
def transformMockWasNeverCalled(obj: c.Tree, called: c.Tree): c.Tree =
97+
called match {
98+
case q"$_.called" => q"verification(_root_.org.mockito.MockitoSugar.verifyZeroInteractions($obj))"
99+
case q"$_.calledAgain" => q"verification(_root_.org.mockito.MockitoSugar.verifyNoMoreInteractions($obj))"
100+
case q"$_.calledAgain.apply($_.ignoringStubs)" =>
101+
q"verification(_root_.org.mockito.MockitoSugar.verifyNoMoreInteractions(_root_.org.mockito.MockitoSugar.ignoreStubs($obj): _*))"
102+
}
103+
106104
called match {
107105
case q"$_.VerifyingOps[$_]($invocation).was($_.called)($order)" =>
108106
transformInvocation(c)(invocation, order, q"_root_.org.mockito.VerifyMacro.Once")
109107

110108
case q"$_.VerifyingOps[$_]($a.$b).wasNever($called)($order)" =>
111109
q"""
112-
if (_root_.org.mockito.MockitoSugar.mockingDetails($a).isMock) ${transformInvocation(c)(q"$a.$b", order, q"_root_.org.mockito.VerifyMacro.Never")}
113-
else ${transformMockWasNeverCalled(c)(q"$a.$b", called)}
110+
if (_root_.org.mockito.MockitoSugar.mockingDetails($a).isMock) {
111+
${called match {
112+
case q"$_.calledAgain" => q"throw _root_.org.mockito.internal.exceptions.Reporter.notAMockPassedToVerifyNoMoreInteractions"
113+
case _ => transformInvocation(c)(q"$a.$b", order, q"_root_.org.mockito.VerifyMacro.Never")
114+
}}
115+
} else {
116+
${transformMockWasNeverCalled(q"$a.$b", called)}
117+
}
114118
"""
115119

116120
case q"$_.VerifyingOps[$_]($obj.$method[..$targs](...$args)).wasNever($_.called)($order)" =>
117121
transformInvocation(c)(q"$obj.$method[..$targs](...$args)", order, q"_root_.org.mockito.VerifyMacro.Never")
118122

119123
case q"$_.VerifyingOps[$_]($obj).wasNever($called)($_)" =>
120-
transformMockWasNeverCalled(c)(obj, called)
124+
transformMockWasNeverCalled(obj, called)
121125

122126
case q"$_.VerifyingOps[$_]($invocation).wasCalled($times)($order)" =>
123127
transformInvocation(c)(invocation, order, times)

scalatest/src/test/scala/user/org/mockito/PostfixVerificationsTest.scala

+17
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import java.io.{ File, FileOutputStream, ObjectOutputStream }
55
import org.mockito.IdiomaticMockito
66
import org.mockito.IdiomaticStubbing
77
import org.mockito.captor.ArgCaptor
8+
import org.mockito.exceptions.misusing.NotAMockException
89
import org.mockito.exceptions.verification._
910
import org.mockito.{ ArgumentMatchersSugar, MockitoSugar }
1011
import org.scalactic.Prettifier
@@ -784,4 +785,20 @@ class PostfixVerificationsTest extends AnyWordSpec with IdiomaticMockitoTestSetu
784785
}
785786
}
786787

788+
val foo: Foo = mock[Foo]
789+
790+
"mock" should {
791+
"verify number of interactions with shared mocks appropriately" in {
792+
foo wasNever called
793+
foo wasNever calledAgain
794+
}
795+
796+
"prevent users using 'calledAgain' on methods" in {
797+
foo.bar wasNever called
798+
a[NotAMockException] should be thrownBy {
799+
foo.bar wasNever calledAgain
800+
}
801+
}
802+
}
803+
787804
}

0 commit comments

Comments
 (0)