2011-11-11 8 views
7

Tengo una clase de registrador que necesita escribir cadenas para archivar. Entonces, tengo un método como ese:Llamada falsa para escribir()

def write_to_file(self, string): 
    self.__file_handle.write(string) 

Tenga en cuenta que el manejo de errores ha sido editado. Claramente quiero probar esto sin escribir en un archivo. Por lo tanto, se burla a través de Mock. He visto this, que explica cómo se puede abrir pero no me sirve aquí. Abro el archivo_handle en __init__. Ahora, puedo hacer eso en setUp() pero el mock_open parece estar fuera del alcance después de la configuración y, por lo tanto, no sirve de nada en el caso de prueba.

¿Cómo escribirías un método de prueba para probar el método write_to_file usando Mock?

Respuesta

1

Comenzaría con la capacidad de cambiar __file_handle en el __init__. Como si reemplazara esto con cualquier objeto simulado/falso que tenga la firma .write, puede probar lo que está escrito en él.

¿Quizás creando un método que configura el __file_handle y sobrescribiendo el método para esta prueba?

+0

Esa es una manera. Pero también debería ser posible simular .write(). – Sardathrion

3

muy simple ...

from mock import patch 

def setUp(self): 
    [...] 
    mock_file_handle = Mock() 
    with patch('__builtin__.open') as mock_file_handle: 
     self.sut = Logger() 
    [...] 

def test_write(self): 
    [...] 
    self.sut.write_message_to_file("ook?") 
    self.assertTrue(self.sut.file_handle.write.called) 
    self.assertTrue(self.sut.file_handle.flush.called) 
    [...] 

Si alguien tiene una mejor solución, por favor hágamelo saber ...

Cuestiones relacionadas