Вы могли всегда использовать сериализацию. Вы могли сериализировать объект, тогда десериализовывают его. Это даст Вам глубокую копию Словаря и всех объектов в нем. Теперь можно создать глубокую копию любого объекта, который отмечен как [сериализуемый], не пишущий специального кода.
Вот два метода, которые будут использовать Двоичную Сериализацию. При использовании этих методов, Вы просто звоните
object deepcopy = FromBinary(ToBinary(yourDictionary));
public Byte[] ToBinary()
{
MemoryStream ms = null;
Byte[] byteArray = null;
try
{
BinaryFormatter serializer = new BinaryFormatter();
ms = new MemoryStream();
serializer.Serialize(ms, this);
byteArray = ms.ToArray();
}
catch (Exception unexpected)
{
Trace.Fail(unexpected.Message);
throw;
}
finally
{
if (ms != null)
ms.Close();
}
return byteArray;
}
public object FromBinary(Byte[] buffer)
{
MemoryStream ms = null;
object deserializedObject = null;
try
{
BinaryFormatter serializer = new BinaryFormatter();
ms = new MemoryStream();
ms.Write(buffer, 0, buffer.Length);
ms.Position = 0;
deserializedObject = serializer.Deserialize(ms);
}
finally
{
if (ms != null)
ms.Close();
}
return deserializedObject;
}
Вам нужно смоделировать контекст для вашего контроллера. Попробуйте использовать Moq
Тогда ваша аранжировка будет выглядеть так:
var controller = new UserController();
var mock = new Mock<ControllerContext>();
mock.SetupGet(x => x.HttpContext.User.Identity.Name).Returns("SOMEUSER");
mock.SetupGet(x => x.HttpContext.Request.IsAuthenticated).Returns(true);
controller.ControllerContext = mock.Object;
После этого вы сможете выполнять свои действия и утверждения.
Если вы еще этого не сделали, я настоятельно рекомендую просмотреть NerdDinner в качестве примера сайта MVC.