Estoy usando Mockito 1.9.0. ¿Cómo verificaría que un método se llamó exactamente una vez, y que uno de los campos que se le pasaron contenía un cierto valor? En mi prueba unitaria, tengoUsando Mockito, ¿cómo verifico que un método fue llamado con un cierto argumento?
@Before
public void setupMainProg() {
// Initialize m_orderSvc, m_opportunitySvc, m_myprojectOrgSvc
...
m_prog = new ProcessOrdersWorker(m_orderSvc, m_opportunitySvc, m_myprojectOrgSvc);
} // setupMainProg
@Test
public void testItAll() throws GeneralSecurityException, IOException {
m_prog.work();
}
El método de "trabajo" llama a un método de "m_orderSvc" (uno de los argumentos pasados al objeto). "m_orderSvc," a su vez contiene un campo de miembro, "m_contractsDao". Quiero verificar que "m_contractsDao.save" haya sido llamado exactamente una vez y que el argumento que se le haya transmitido contenga un cierto valor.
Esto puede ser un poco confuso. Déjame saber cómo puedo aclarar mi pregunta y estoy feliz de hacerlo.
su información, usted podría dejar fuera ', los tiempos (1) ', ya que siempre se da a entender a menos que agregue un cuantificador especificando algo que no sea exactamente una sola vez. Y en lugar de 'any (String.class)', hay un 'anyString()' ligeramente más conveniente. –
También vale la pena señalar que el argumento que se pasa al método DESPUÉS de 'verificar' se compara usando 'iguales' al argumento que se pasó durante la prueba real. Entonces, sea cual sea el método (el método 'save' en el ejemplo de mamboking), piense en el _type_ de cada parámetro, y si una comparación con' iguales' es lo que realmente quiere. Si quiere que el argumento sea probado con algo que no sea 'igual', necesitará un' ArgumentMatcher' de algún tipo (que podría ser un 'ArgumentCaptor' como en la respuesta de Kevin Welker). –
¿Cómo se especifica exactamente una vez, no dos o más? El comentario de @ KevinWelker dice que está implícito, pero no está seguro si significa exactamente una vez, o al menos una vez. – aliteralmind