I fijó esta sesión objeto de burla en el ejemplo aquí: How to MOQ an Indexed property¿Cómo puedo simular correctamente KeysCollection en HttpSessionStateBase?
/// <summary>
/// HTTP session mockup.
/// </summary>
internal sealed class HttpSessionMock : HttpSessionStateBase
{
private readonly Dictionary<string, object> objects = new Dictionary<string, object>();
public override object this[string name]
{
get { return (objects.ContainsKey(name)) ? objects[name] : null; }
set { objects[name] = value; }
}
}
algunos ejemplos de código para producir un error ...
var mockSession = new HttpSessionMock();
var keys = mockSession.Keys;
error: El método u operación no está implementada.
Necesito implementar la propiedad Keys, pero no puedo crear un objeto KeysCollection.
¿Cuál es la mejor manera de hacerlo?
EDIT: [Solución]
acabé cambiando la HttpSessionMock en base a la respuesta dada. Esto es con lo que terminé. (También agregué una referencia a System.Linq).
internal sealed class HttpSessionMock : HttpSessionStateBase
{
private readonly NameValueCollection objects = new NameValueCollection();
public override object this[string name]
{
get { return (objects.AllKeys.Contains(name)) ? objects[name] : null; }
set { objects[name] = (string)value; }
}
public override NameObjectCollectionBase.KeysCollection Keys
{
get { return objects.Keys; }
}
}
nota: este simulacro de sesión se sólo cadenas de tiendas, no objetos.
Aunque el código proviene de una pregunta de Moq, la solución no utiliza la biblioteca de Moq. Sugeriría eliminar la etiqueta Moq. – TrueWill
Etiqueta Moq eliminada. – joelnet
Este simulacro/falso explota cuando trato de meter un bool en él. Encontré un fragmento de código que funciona para esto aquí: http://stackoverflow.com/questions/524457/how-do-you-mock-the-session-object-collection-using-moq –