Как делают меня модульный тест метод контроллера, который имеет [Авторизовать] примененный атрибут?

Вы могли всегда использовать сериализацию. Вы могли сериализировать объект, тогда десериализовывают его. Это даст Вам глубокую копию Словаря и всех объектов в нем. Теперь можно создать глубокую копию любого объекта, который отмечен как [сериализуемый], не пишущий специального кода.

Вот два метода, которые будут использовать Двоичную Сериализацию. При использовании этих методов, Вы просто звоните

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;
}
30
задан Robert Harvey 9 December 2009 в 22:06
поделиться

1 ответ

Вам нужно смоделировать контекст для вашего контроллера. Попробуйте использовать 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.

27
ответ дан 28 November 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: