IHeadersDictionary, возвращающий нуль после насмешки - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь смоделировать IHeadersDictionary и всякий раз, когда я пытаюсь получить к нему доступ, я возвращаю Null.

public interface IRequestScopeContext
{
    IHeaderDictionary Headers { get; set; }
    ISessionInfo SessionInfo { get; set; }
    HttpContext HttpContextInfo { get; set; }
}

[SetUp]
public void Setup()
{
    var headers = new Dictionary<string, string>
    {
        { "Key", "Value"}
    } as IHeaderDictionary;

    var sessionInfo = new SessionInfo
    {
        AccountId = "AccountId",
        UserId = "UserId",
    };

    requestScopeContext = new Mock<IRequestScopeContext>();
    requestScopeContext.Setup(x => x.Headers).Returns(headers);
    requestScopeContext.Setup(x => x.SessionInfo).Returns(sessionInfo);

    serviceProvider = new Mock<IServiceProvider>();
    serviceProvider.Setup(sp => sp.GetService(It.Is<Type>((Type t) => t.Name.Equals("IRequestScopeContext")))).Returns(requestScopeContext.Object);

    httpContextAccessor = new Mock<IHttpContextAccessor>();
    httpContextAccessor.Setup(x => x.HttpContext.RequestServices).Returns(serviceProvider.Object);
}

Я также пытался использовать

requestScopeContext.Setup(x => x.Headers.Add( "Key", "Value"));

, но всякий раз, когда я получаю доступ к requestScopeContext.Headers, он возвращает мне ноль.

Как мне издеваться над этим словарем?

Мой TestMethod это

[Test]
public void SessionHelper_InvokeConstructor_Should_ReturnValidObject()
{
    var sessionHelper = new SessionHelper(httpContextAccessor.Object);

    Assert.IsNotNull(sessionHelper);
}

И это часть кода, которую я тестирую.

public SessionHelper(IHttpContextAccessor httpContextAccessor)
{
    IRequestScopeContext requestScopeContext = (IRequestScopeContext)httpContextAccessor.HttpContext.RequestServices.GetService(typeof(IRequestScopeContext));

    currentAccountId = requestScopeContext.SessionInfo?.AccountId;
    currentUserId = requestScopeContext.SessionInfo?.UserId;
    requestId = requestScopeContext.Headers?["key"];
}

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

ты уверен, что твоя работа по кастингу?

var headers = new Dictionary<string, string>
    {
        { "Key", "Value"}
    } as IHeaderDictionary;

Здесь я быстро проверил Moq.Конфигурация правильная.enter image description here

0 голосов
/ 17 октября 2018

Как отметил @Iurii Maksimov, ваше приведение неверно - прямое приведение между Dictionary<string, string> и IHeaderDictionary не используется, используйте вместо этого:

var headers = new HeaderDictionary(new Dictionary<String, StringValues>
{
    { "Key", "Value"}
}) as IHeaderDictionary;
...