Estoy probando un método que llama a -[NSDate date]
, y utiliza la hora del sistema como referencia para hacer algo de lógica. Necesito probar si la lógica es correcta en algunos días específicos del año, pero no puedo esperar hasta ese día. Entonces, ¿puedo cambiar la fecha del sistema programáticamente cuando pruebo la unidad?Cambiar la fecha del sistema para la prueba de unidad de cacao
10
A
Respuesta
12
Necesita usar Mock object y en Objective C puede hacerlo fácilmente con categorías anulando solo los métodos que necesite. Por ejemplo, podría utilizar la siguiente categoría:
// ------------- File: NSDate+NSDateMock.h
@interface NSDate (NSDateMock)
+(void)setMockDate:(NSString *)mockDate;
+(NSDate *) mockCurrentDate;
@end
// -------------- File: NSDate+NSDateMock.m
#import "NSDate+NSDateMock.h"
@implementation NSDate (NSDateMock)
static NSDate *_mockDate;
+(NSDate *)mockCurrentDate
{
return _mockDate;
}
+(void)setMockDate:(NSString *)mockDate
{
_mockDate = [NSDate dateWithString:mockDate];
}
@end
y, además, tendrá que SwizzleClassMethod
void SwizzleClassMethod(Class c, SEL orig, SEL new) {
Method origMethod = class_getClassMethod(c, orig);
Method newMethod = class_getClassMethod(c, new);
c = object_getClass((id)c);
if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod)))
class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
else
method_exchangeImplementations(origMethod, newMethod);
}
y luego en su prueba de la unidad usted será capaz de utilizar de esta manera
SwizzleClassMethod([NSDate class], @selector(date), @selector(mockCurrentDate));
[NSDate setMockDate:@"2007-03-24 10:45:32 +0200"];
NSLog(@"Date is: %@", [NSDate date]);
Cuestiones relacionadas
- 1. Prueba de la unidad Interfaz de usuario de cacao
- 2. Cambiar la fecha del sistema mediante programación
- 3. Sistema de archivos Mock para la prueba de la unidad Perl
- 4. ¿Deberíamos registrar la unidad de prueba?
- 5. ¿Cómo puedo obtener la letra de la unidad del sistema?
- 6. cómo cambiar la hora actual para las funciones de fecha de prueba unitaria en php
- 7. Módulo de Python para cambiar la fecha y hora del sistema
- 8. idea general de la unidad de prueba
- 9. cambiar la configuración regional de la fecha
- 10. Prueba de la unidad de terceros ORM
- 11. WiX - Instalación de archivos en la unidad del sistema
- 12. Usando httpcontext en la prueba de unidad
- 13. configuración de prueba de la unidad Qt
- 14. Cambiar la propiedad del sistema user.home
- 15. Subprocesos de prueba de la unidad?
- 16. Sockets de prueba de unidad
- 17. Prueba de la unidad función asíncrona
- 18. jQuery datepicker - cambiar la fecha de "hoy"?
- 19. Prueba de unidad Herramienta para la base de datos Sybase
- 20. C# - Prueba de la unidad, ¿simulacro?
- 21. Prueba de la unidad C automatizada
- 22. Prueba simple de la unidad haskell
- 23. Mock UdpClient para prueba de unidad
- 24. ¿Qué es la prueba positiva y la prueba negativa en la unidad de prueba
- 25. ¿Cómo obtener el nombre del método de prueba de la unidad en tiempo de ejecución dentro de la prueba unitaria?
- 26. cacao cambiar un foco de mi solicitud
- 27. ¿Cómo prueba (unidad) el esquema de la base de datos?
- 28. comprobar la salida en la prueba de la unidad MSTest
- 29. ¿Cómo hacer la prueba de unidad para Excepciones?
- 30. Cómo escribir la prueba de unidad para "InterruptedException"
En general, puede anular '- [NSDate date]' en la categoría para devolver una fecha específica. – brigadir