[OCMock][OCMVerify] ¿Por qué OCMVerify aún pasa cuando no llamo a un método?
id mockDelegate = OCMProtocolMock(@protocol(managerDelegate));
self.vc.delegate = mockDelegate;
OCMExpect([mockDelegate someMethod:OCMOCK_ANY]);
… Ejecuta algunos métodos para hacer que vc.m responda a la devolución de llamada del delegado someMethod…
OCMVerify(mockDelegate);
Implementé el método anterior y descubrí que incluso si la clase no responde al método someMethod, OCMVerify aún lo considera como aprobado. ¿Por qué?
davy.ai
Es probable que el protocolo
managerDelegate
incluya el métodosomeMethod
como un método opcional, lo que significa que no se requiere que todas las clases que se ajustan a este protocolo lo implementen. Por lo tanto, si una clase no implementasomeMethod
, OCMProtocolMock no lanzará un error cuando se llame al método, y OCMVerify seguirá pasando porque el objeto mockDelegate se asignó correctamente avc.delegate
. Para verificar que el método fue llamado realmente, puedes usar OCMVerify con un argumento adicional que especifique el número mínimo de veces que el método debería ser llamado, de la siguiente manera:OCMVerify([mockDelegate someMethod:OCMOCK_ANY])
oOCMVerify([mockDelegate someMethod:OCMOCK_ANY] atLeastOnce)
dependiendo de tus requisitos.