ASP.Net Core 2.0 SignInAsync devuelve una excepción El valor no puede ser nulo, proveedor

Tengo una aplicación web ASP.Net Core 2.0 que estoy adaptando con pruebas unitarias (usando NUnit). La aplicación funciona bien, y la mayoría de las pruebas hasta ahora funcionan bien.

Sin embargo, probar la autenticación / autorización (un usuario inicia sesión y puede acceder[Authorize] acciones filtradas) está fallando con ...

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

...después...

await HttpContext.SignInAsync(principal);

... pero no está claro cuál es la causa subyacente. La ejecución del código se detiene en el método llamado aquí y no se muestra ninguna excepción en el IDE, pero la ejecución del código regresa a la persona que llama y luego termina (aún veoThe program '[13704] dotnet.exe' has exited with code 0 (0x0). en la ventana de salida de VS.)

El Explorador de pruebas se muestra en rojo y proporciona la excepción a la que se hace referencia (de lo contrario, no tendría idea del problema).

Estoy trabajando en crear una repro para señalar a la gente (resultando un poco involucrado hasta ahora).

¿Alguien sabe cómo identificar la causa subyacente? ¿Se trata de un problema relacionado con la DI (algo necesario que no se proporciona en la prueba pero se encuentra en ejecución normal)?

ACTUALIZACIÓN1: Proporcionando el código de autenticación 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();
}

El código de prueba que falla ...

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");
}

ACTUALIZACIÓN3: Residencia encharla @nkosisugirió que este es un problema derivado de mi incumplimiento de las necesidades de los requisitos de inyección de dependencia paraHttpContext.

sin embargo, lo que aún no está claro es: si es, de hecho, un problema de no proporcionar la dependencia de servicio adecuada, ¿por qué el código funciona normalmente (cuando no se está probando)? El SUT (controlador) solo acepta un parámetro IRepository (por lo tanto, eso es todo lo que se proporciona en cualquier caso). se ejecuta sin problema?

ACTUALIZACIÓN4: Si bien @Nkosi respondió al error / problema con una solución, todavía me pregunto por qué el IDE no presenta de manera precisa / consistente la excepción subyacente. ¿Es esto un error o se debe a los operadores asíncronos / en espera y al adaptador / corredor de prueba NUnit? ¿Por qué no aparecen "excepciones" como esperaría al depurar la prueba, y el código de salida sigue siendo cero (normalmente indica un estado de retorno exitoso)?

Respuestas a la pregunta(3)

Su respuesta a la pregunta