Establecedor de propiedad falso

Me gustaría burlarme de un solucionador de properties en mi testing, pero no puedo encontrar nada sobre cómo lo hace. Esto es lo que he intentado hasta ahora:

interface Foo { var property: Int } @RunWith(MockitoJUnitRunner::class) class TestClass { @Mock private val fooMock: Foo = mock() private var temp = 0 @Before fun setup() { whenever(fooMock.property).then { invocation -> if (invocation.arguments.isEmpty()) { // this part works fine return@then 15 } else { // this never gets called temp = invocation.getArgument(0) null } } } } 

nota: estoy usando la biblioteca com.nhaarman.mockito_kotlin

Una solución ligeramente fea pero funcional para burlarse de un colocador, utilizando una reference de propiedad enlazada para get el colocador:

 whenever(fooMock::property.setter.invoke(any())).then { println("setter called with ${it.arguments[0]}") } 

Algunas alternativas:

Si desea verificar que una propiedad se estableció en un valor determinado, puede hacer lo siguiente:

 fooMock.property = 25 verify(fooMock).property = 25 

Si desea capturar el valor en el que se estableció la propiedad, puede usar un ArgumentCaptor , de esta manera:

 class TestClass { @Mock private lateinit var fooMock: Foo @Captor private lateinit var captor: ArgumentCaptor<Int> @Test fun test() { fooMock.property = 25 verify(fooMock).property = capture(captor) assertEquals(25, captor.value) } } 

Sugerencia general para Mockito: estas dos líneas crean una simulación, no es necesario utilizar la anotación @Mock y el método mock() .

 @Mock private lateinit var fooMock: Foo private val fooMock: Foo = mock()