Skip to content

Commit a30c84e

Browse files
committed
Don't check unused or unexpected stubs for lenient mocks
1 parent bba17bf commit a30c84e

File tree

2 files changed

+78
-8
lines changed

2 files changed

+78
-8
lines changed

core/src/main/scala/org/mockito/MockitoScalaSession.scala

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
package org.mockito
22

3-
import org.mockito.MockitoScalaSession.{MockitoScalaSessionListener, UnexpectedInvocations}
4-
import org.mockito.exceptions.misusing.{UnexpectedInvocationException, UnnecessaryStubbingException}
3+
import org.mockito.MockitoScalaSession.{ MockitoScalaSessionListener, UnexpectedInvocations }
4+
import org.mockito.exceptions.misusing.{ UnexpectedInvocationException, UnnecessaryStubbingException }
55
import org.mockito.internal.stubbing.StubbedInvocationMatcher
6-
import org.mockito.invocation.{DescribedInvocation, Invocation, Location}
6+
import org.mockito.invocation.{ DescribedInvocation, Invocation, Location }
77
import org.mockito.listeners.MockCreationListener
88
import org.mockito.mock.MockCreationSettings
99
import org.mockito.quality.Strictness
1010
import org.mockito.quality.Strictness.STRICT_STUBS
1111
import org.mockito.session.MockitoSessionLogger
1212

13-
import scala.collection.mutable
1413
import scala.collection.JavaConverters._
14+
import scala.collection.mutable
1515

1616
class MockitoScalaSession(name: String, strictness: Strictness, logger: MockitoSessionLogger) {
17-
private val listener = new MockitoScalaSessionListener
17+
private val listener = new MockitoScalaSessionListener(strictness)
1818
private val mockitoSession = Mockito.mockitoSession().name(name).logger(logger).strictness(strictness).startMocking()
1919

2020
Mockito.framework().addListener(listener)
@@ -110,7 +110,7 @@ object MockitoScalaSession {
110110
def report(): Unit = if (nonEmpty) throw new UnnecessaryStubbingException(toString)
111111
}
112112

113-
class MockitoScalaSessionListener extends MockCreationListener {
113+
class MockitoScalaSessionListener(strictness: Strictness) extends MockCreationListener {
114114
def reportIssues(): Seq[Reporter] = {
115115
val mockDetails = mocks.toSet.map(MockitoSugar.mockingDetails)
116116

@@ -138,7 +138,7 @@ object MockitoScalaSession {
138138
private val mocks = mutable.Set.empty[AnyRef]
139139

140140
override def onMockCreated(mock: AnyRef, settings: MockCreationSettings[_]): Unit =
141-
if (!settings.isLenient) mocks += mock
141+
if (!settings.isLenient && strictness != Strictness.LENIENT) mocks += mock
142142
}
143143
}
144144

core/src/test/scala/org/mockito/MockitoScalaSessionTest.scala

+71-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.mockito
33
import org.scalatest
44
import org.mockito.exceptions.misusing.{PotentialStubbingProblem, UnexpectedInvocationException, UnnecessaryStubbingException}
55
import org.mockito.exceptions.verification.SmartNullPointerException
6+
import org.mockito.quality.Strictness
67
import org.scalatest.{OptionValues, WordSpec}
78

89
//noinspection RedundantDefaultArgument
@@ -175,7 +176,7 @@ class MockitoScalaSessionTest extends WordSpec with IdiomaticMockito with scalat
175176
}
176177
}
177178

178-
"don't check unused stubs for lenient mocks" in {
179+
"don't check unexpected stubs for lenient mocks" in {
179180
MockitoScalaSession().run {
180181
val foo = mock[Foo](withSettings.lenient())
181182

@@ -186,7 +187,76 @@ class MockitoScalaSessionTest extends WordSpec with IdiomaticMockito with scalat
186187
foo.bar("paco")
187188
}
188189
}
190+
"check unexpected stubs for lenient mocks" in {
191+
intercept[UnexpectedInvocationException] {
192+
MockitoScalaSession().run {
193+
val foo = mock[Foo]
194+
195+
foo.bar("pepe") shouldReturn "mocked"
196+
197+
foo.bar("pepe")
198+
199+
foo.bar("paco")
200+
}
201+
}
202+
}
203+
204+
"don't check unexpected stubs in lenient setting" in {
205+
MockitoScalaSession(strictness = Strictness.LENIENT).run {
206+
val foo = mock[Foo]
207+
208+
foo.bar("pepe") shouldReturn "mocked"
209+
210+
foo.bar("pepe")
211+
212+
foo.bar("paco")
213+
}
214+
}
215+
"check unexpected stubs in lenient setting" in {
216+
intercept[UnexpectedInvocationException] {
217+
MockitoScalaSession().run {
218+
val foo = mock[Foo]
219+
220+
foo.bar("pepe") shouldReturn "mocked"
189221

222+
foo.bar("pepe")
223+
224+
foo.bar("paco")
225+
}
226+
}
227+
}
228+
229+
"don't check unused stubs for lenient mocks" in {
230+
MockitoScalaSession().run {
231+
val foo = mock[Foo](withSettings.lenient())
232+
foo.bar("pepe") shouldReturn "mocked"
233+
}
234+
}
235+
236+
"check unused stubs for not lenient mocks" in {
237+
intercept[UnnecessaryStubbingException] {
238+
MockitoScalaSession().run {
239+
val foo = mock[Foo]
240+
foo.bar("pepe") shouldReturn "mocked"
241+
}
242+
}
243+
}
244+
245+
"don't check unused stubs in lenient setting" in {
246+
MockitoScalaSession(strictness = Strictness.LENIENT).run {
247+
val foo = mock[Foo]
248+
foo.bar("pepe") shouldReturn "mocked"
249+
}
250+
}
251+
252+
"check unused stubs in not lenient setting" in {
253+
intercept[UnnecessaryStubbingException] {
254+
MockitoScalaSession(strictness = Strictness.STRICT_STUBS).run {
255+
val foo = mock[Foo]
256+
foo.bar("pepe") shouldReturn "mocked"
257+
}
258+
}
259+
}
190260
"work with nested deep stubs" in {
191261
MockitoScalaSession().run {
192262
val foo = mock[Foo](ReturnsDeepStubs)

0 commit comments

Comments
 (0)