ASP.Net Core 2.0 SignInAsync retorna exceção Valor não pode ser nulo, provedor

Eu tenho um aplicativo Web ASP.Net Core 2.0 que estou atualizando com testes de unidade (usando o NUnit). O aplicativo funciona bem, e a maioria dos testes até agora funciona bem.

No entanto, testando a autenticação / autorização (um usuário faz login e pode acessar[Authorize] ações filtradas) está falhando com ...

System.ArgumentNullException: Value cannot be null.
Parameter name: provider

...depois de...

await HttpContext.SignInAsync(principal);

... mas não está claro qual é de fato a causa subjacente. A execução do código para no método chamado aqui e nenhuma exceção é mostrada no IDE, mas a execução do código retorna ao chamador e termina (ainda assim eu ainda vejoThe program '[13704] dotnet.exe' has exited with code 0 (0x0). na janela de saída do VS.)

O Gerenciador de Testes mostra vermelho e fornece a exceção mencionada (caso contrário, eu não teria idéia do problema.)

Estou trabalhando na criação de uma reprodução para apontar as pessoas (até agora um pouco envolvidas até agora).

Alguém sabe como identificar a causa subjacente? Esse é um problema relacionado ao DI (algo necessário que não está sendo fornecido no teste, mas está em execução normal)?

UPDATE1: Fornecendo código de autenticação solicitado ...

public async Task<IActionResult> Registration(RegistrationViewModel vm) {
    if (ModelState.IsValid) {
        // Create registration for user
        var regData = createRegistrationData(vm);
        _repository.AddUserRegistrationWithGroup(regData);

        var claims = new List<Claim> {
            new Claim(ClaimTypes.NameIdentifier, regData.UserId.ToString())
        };
        var ident = new ClaimsIdentity(claims);
        var principal = new ClaimsPrincipal(ident);

        await HttpContext.SignInAsync(principal); // FAILS HERE

        return RedirectToAction("Welcome", "App");
    } else {
        ModelState.AddModelError("", "Invalid registration information.");
    }

    return View();
}

O código de teste que falha ...

public async Task TestRegistration()
{
    var ctx = Utils.GetInMemContext();
    Utils.LoadJsonData(ctx);
    var repo = new Repository(ctx);
    var auth = new AuthController(repo);
    auth.ControllerContext = new ControllerContext();
    auth.ControllerContext.HttpContext = new DefaultHttpContext();

    var vm = new RegistrationViewModel()
    {
        OrgName = "Dev Org",
        BirthdayDay = 1,
        BirthdayMonth = "January",
        BirthdayYear = 1979 
    };

    var orig = ctx.Registrations.Count();
    var result = await auth.Registration(vm); // STEPS IN, THEN FAILS
    var cnt = ctx.Registrations.Count();
    var view = result as ViewResult;

    Assert.AreEqual(0, orig);
    Assert.AreEqual(1, cnt);
    Assert.IsNotNull(result);
    Assert.IsNotNull(view);
    Assert.IsNotNull(view.Model);
    Assert.IsTrue(string.IsNullOrEmpty(view.ViewName) || view.ViewName == "Welcome");
}

UPDATE3: Baseado embate-papo @nkosisugerido que esse é um problema decorrente do fato de eu não atender às necessidades dos requisitos de injeção de dependência paraHttpContext.

Contudo, o que ainda não está claro é: se é, de fato, um problema de não fornecer a dependência de serviço adequada, por que o código funciona normalmente (quando não está sendo testado). O SUT (controlador) aceita apenas um parâmetro IRepository (de modo que é tudo o que é fornecido em qualquer caso). Por que criar um ctor sobrecarregado (ou simulação) apenas para teste, quando o ctor existente é tudo o que é chamado ao executar o programa e corre sem problema?

UPDATE4: Enquanto o @Nkosi respondeu ao bug / problema com uma solução, ainda estou me perguntando por que o IDE não está apresentando a exceção subjacente de maneira precisa / consistente. Isso é um bug ou é devido aos operadores assíncronos / aguardados e ao adaptador / corredor do NUnit Test? Por que as exceções não estão "aparecendo" como eu esperaria durante a depuração do teste e o código de saída ainda é zero (normalmente indicando um estado de retorno bem-sucedido)?

questionAnswers(3)

yourAnswerToTheQuestion