Tengo una clase que serializa un conjunto de objetos (usando la serialización XML) que quiero probar en una unidad.¿Hay algún punto de serialización de prueba de la unidad?
Mi problema es que parece que voy a probar la implementación .NET de la serialización XML, en lugar de algo útil. También tengo un pequeño escenario de huevo y pollo donde para probar el Reader, necesitaré un archivo producido por el escritor para hacerlo.
creo que las preguntas (hay 3 pero todos ellos están relacionados) Estoy en última instancia, en busca de comentarios sobre el contenido son:
- ¿Es posible probar el escritor, sin utilizar el lector?
- ¿Cuál es la mejor estrategia para probar el lector (archivo XML? ¿Mocking con grabación/reproducción)? ¿Es el caso que todo lo que realmente estarás haciendo es probar los valores de las propiedades de los objetos que se han deserializado?
- ¿Cuál es la mejor estrategia para probar al escritor?
información de antecedentes sobre la serialización XML
no estoy usando un esquema, por lo que todos los elementos y atributos XML coincide con las propiedades de los objetos. Como no hay esquema, las etiquetas/atributos que no coinciden con las que se encuentran en las propiedades de cada objeto, simplemente son ignoradas por XmlSerializer (por lo que el valor de la propiedad es nulo o predeterminado). Aquí está un ejemplo
<MyObject Height="300">
<Name>Bob</Name>
<Age>20</Age>
<MyObject>
sería asignar a
public class MyObject
{
public string Name { get;set; }
public int Age { get;set; }
[XmlAttribute]
public int Height { get;set; }
}
y viceversa. Si el objeto cambia al siguiente, el XML aún se deserializaría correctamente, pero FirstName estaría en blanco.
public class MyObject
{
public string FirstName { get;set; }
public int Age { get;set; }
[XmlAttribute]
public int Height { get;set; }
}
Un archivo XML no válido sería deserializar correctamente, por lo tanto, la prueba de la unidad pasaría a menos que ejecutara las afirmaciones sobre los valores de la MiObjeto.
Originalmente tenía un esquema, y la lectura + escritura fue realizada por mi propia clase que escribió el gráfico de objetos. Entonces (¡1 año después!) Descubrí que todo el trabajo podría haber sido realizado por XmlSerializer. En términos de compatibilidad con versiones anteriores, diría que el XML estaría vinculado a la versión de ensamblaje con la que fue escrito. Entonces, si le dio a la última versión del ensamblado algunos XML producidos por versiones anteriores, existe la posibilidad de que el modelo de objetos haya cambiado, por lo que ya no coincide. No estoy seguro de que esto ocurra alguna vez, pero no veo cómo (continúa) –
se deserializaría un formato anterior (como lo menciona Jon) sin que siempre se rompa y tenga que realizarlo manualmente con un XmlReader? –
XmlSerializer elimina datos inesperados sin error, o puede usar '[XmlAny *]' - por lo que hay formas de * parcialmente * deserializar un objeto (y obtener los otros datos de los "cualesquiera" accesorios). –