Skip to content

Don't check unused or unexpected stubs for lenient mocks #40

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 4, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions core/src/main/scala/org/mockito/MockitoScalaSession.scala
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package org.mockito

import org.mockito.MockitoScalaSession.{MockitoScalaSessionListener, UnexpectedInvocations}
import org.mockito.exceptions.misusing.{UnexpectedInvocationException, UnnecessaryStubbingException}
import org.mockito.MockitoScalaSession.{ MockitoScalaSessionListener, UnexpectedInvocations }
import org.mockito.exceptions.misusing.{ UnexpectedInvocationException, UnnecessaryStubbingException }
import org.mockito.internal.stubbing.StubbedInvocationMatcher
import org.mockito.invocation.{DescribedInvocation, Invocation, Location}
import org.mockito.invocation.{ DescribedInvocation, Invocation, Location }
import org.mockito.listeners.MockCreationListener
import org.mockito.mock.MockCreationSettings
import org.mockito.quality.Strictness
import org.mockito.quality.Strictness.STRICT_STUBS
import org.mockito.session.MockitoSessionLogger

import scala.collection.mutable
import scala.collection.JavaConverters._
import scala.collection.mutable

class MockitoScalaSession(name: String, strictness: Strictness, logger: MockitoSessionLogger) {
private val listener = new MockitoScalaSessionListener
private val listener = new MockitoScalaSessionListener(strictness)
private val mockitoSession = Mockito.mockitoSession().name(name).logger(logger).strictness(strictness).startMocking()

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

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

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

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

Expand Down
72 changes: 71 additions & 1 deletion core/src/test/scala/org/mockito/MockitoScalaSessionTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package org.mockito
import org.scalatest
import org.mockito.exceptions.misusing.{PotentialStubbingProblem, UnexpectedInvocationException, UnnecessaryStubbingException}
import org.mockito.exceptions.verification.SmartNullPointerException
import org.mockito.quality.Strictness
import org.scalatest.{OptionValues, WordSpec}

//noinspection RedundantDefaultArgument
Expand Down Expand Up @@ -175,7 +176,7 @@ class MockitoScalaSessionTest extends WordSpec with IdiomaticMockito with scalat
}
}

"don't check unused stubs for lenient mocks" in {
"don't check unexpected stubs for lenient mocks" in {
MockitoScalaSession().run {
val foo = mock[Foo](withSettings.lenient())

Expand All @@ -186,7 +187,76 @@ class MockitoScalaSessionTest extends WordSpec with IdiomaticMockito with scalat
foo.bar("paco")
}
}
"check unexpected stubs for lenient mocks" in {
intercept[UnexpectedInvocationException] {
MockitoScalaSession().run {
val foo = mock[Foo]

foo.bar("pepe") shouldReturn "mocked"

foo.bar("pepe")

foo.bar("paco")
}
}
}

"don't check unexpected stubs in lenient setting" in {
MockitoScalaSession(strictness = Strictness.LENIENT).run {
val foo = mock[Foo]

foo.bar("pepe") shouldReturn "mocked"

foo.bar("pepe")

foo.bar("paco")
}
}
"check unexpected stubs in lenient setting" in {
intercept[UnexpectedInvocationException] {
MockitoScalaSession().run {
val foo = mock[Foo]

foo.bar("pepe") shouldReturn "mocked"

foo.bar("pepe")

foo.bar("paco")
}
}
}

"don't check unused stubs for lenient mocks" in {
MockitoScalaSession().run {
val foo = mock[Foo](withSettings.lenient())
foo.bar("pepe") shouldReturn "mocked"
}
}

"check unused stubs for not lenient mocks" in {
intercept[UnnecessaryStubbingException] {
MockitoScalaSession().run {
val foo = mock[Foo]
foo.bar("pepe") shouldReturn "mocked"
}
}
}

"don't check unused stubs in lenient setting" in {
MockitoScalaSession(strictness = Strictness.LENIENT).run {
val foo = mock[Foo]
foo.bar("pepe") shouldReturn "mocked"
}
}

"check unused stubs in not lenient setting" in {
intercept[UnnecessaryStubbingException] {
MockitoScalaSession(strictness = Strictness.STRICT_STUBS).run {
val foo = mock[Foo]
foo.bar("pepe") shouldReturn "mocked"
}
}
}
"work with nested deep stubs" in {
MockitoScalaSession().run {
val foo = mock[Foo](ReturnsDeepStubs)
Expand Down