O inicializador de tipo para 'Nancy.Bootstrapper.AppDomainAssemblyTypeScanner' accionou uma excepção

StackOverflow https://stackoverflow.com//questions/25080544

Pergunta

Estou recebendo uma exceção quando eu executar testes de unidade em um Nancy projeto.O aplicativo é executado conforme o esperado, eu só recebo o problema ao executar os testes de unidade.

Eu estou usando Nancy 0.23.2.0.Eu também estou usando Nancy.Autenticação.Básica 0.23.2.0, Nancy.Bootstrappers.Unidade 0.23.2.0 e Nancy.Teste 0.23.2.0 sobre o projeto de teste de unidade.

Eu tenho Nancy src para esta versão e poderia rastrear o problema para AppDomainAssemblyTypeScanner.UpdateTypes() especificamente a expressão do linq.

public static void UpdateTypes()
{
    UpdateAssemblies();

    types = (from assembly in assemblies
        from type in assembly.SafeGetExportedTypes()
        where !type.IsAbstract
        select type).ToArray();
}

O código para o teste de onde eu recebo a exceção é este:

[TestFixture]
public class IndexModuleTests
{
    private Browser _browser;

    [SetUp]
    public void SetUp()
    {
        var bootstrapper = new ConfigurableBootstrapper(bootstrapperConfigurator =>
        {
            bootstrapperConfigurator.RootPathProvider(new TestRootPathProvider());
            bootstrapperConfigurator.Module<IndexModule>();
            bootstrapperConfigurator.RequestStartup((container, pipelines, context) =>
            {
                context.CurrentUser = new UserIdentity {UserName = "demo"};
            });
        });

        _browser = new Browser(bootstrapper);          
    }

    [Test]
    public void ShouldAllowAuthenticatedUsersToBrowseSecuredPage()
    {
        var result = _browser.Get("/index", with => with.HttpRequest());

        result.StatusCode.Should().Be(HttpStatusCode.OK);
    }
}

O módulo estou tentando testar:

public class IndexModule : NancyModule
{
    public IndexModule()
    {
        this.RequiresAuthentication();

        Get["/"] = parameters => View["index"];
    }
}

A aplicação de Bootstrapper parecido com este:

public class Bootstrapper : UnityNancyBootstrapper
{
    protected override void ConfigureApplicationContainer(IUnityContainer contrainer)
    {
       contrainer.RegisterType<IUserValidator, UserValidator>();
    }

    protected override void ApplicationStartup(IUnityContainer container, IPipelines pipelines)
    {
        base.ApplicationStartup(container, pipelines);

        pipelines.EnableBasicAuthentication(new BasicAuthenticationConfiguration(
            container.Resolve<IUserValidator>(),
            "MyAppDomain"));
    }

    protected override void ConfigureConventions(NancyConventions nancyConventions)
    {
        nancyConventions
            .StaticContentsConventions
            .Add(StaticContentConventionBuilder.AddDirectory("js", @"js"));

        nancyConventions
            .StaticContentsConventions
            .Add(StaticContentConventionBuilder.AddDirectory("css", @"css"));

        nancyConventions
            .StaticContentsConventions
            .Add(StaticContentConventionBuilder.AddDirectory("img", @"img"));

        nancyConventions
            .StaticContentsConventions
            .Add(StaticContentConventionBuilder.AddDirectory("fonts", @"fonts"));

        base.ConfigureConventions(nancyConventions);
    }
}

A exceção:

SetUp : System.TypeInitializationException : The type initializer for 'Nancy.Bootstrapper.AppDomainAssemblyTypeScanner' threw an exception.
----> System.TypeLoadException : Could not load type 'Nancy.Bootstrapper.ApplicationRegistrations' from assembly 'Nancy, Version=0.23.2.0, Culture=neutral, PublicKeyToken=null'.
at Nancy.Bootstrapper.AppDomainAssemblyTypeScanner.TypesOf(ScanMode mode)
at Nancy.Conventions.NancyConventions.BuildDefaultConventions()
at Nancy.Conventions.NancyConventions..ctor()
at Nancy.Bootstrapper.NancyBootstrapperBase`1..ctor()
at Nancy.Bootstrapper.NancyBootstrapperWithRequestContainerBase`1..ctor()
at Nancy.Testing.ConfigurableBootstrapper..ctor(Action`1 configuration)
at Pandora.Web.Backoffice.Lite.Tests.IndexModuleTests.SetUp() in IndexModuleTests.cs: line 17
--TypeLoadException
at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes)
at System.Reflection.RuntimeAssembly.GetExportedTypes()
at Nancy.Extensions.AssemblyExtensions.SafeGetExportedTypes(Assembly assembly)
at Nancy.Bootstrapper.AppDomainAssemblyTypeScanner.<UpdateTypes>b__16(Assembly assembly)
at System.Linq.Enumerable.<SelectManyIterator>d__31`3.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray(IEnumerable`1 source)
at Nancy.Bootstrapper.AppDomainAssemblyTypeScanner.UpdateTypes()
at Nancy.Bootstrapper.AppDomainAssemblyTypeScanner.LoadAssembliesWithNancyReferences()
at Nancy.Bootstrapper.AppDomainAssemblyTypeScanner..cctor()
Foi útil?

Solução

O tipo de ApplicationRegistrations o nome foi mudado para Registrations no confirmar 21c2f00 (v0.23) porque ele foi alterado para incluir também o pedido de escopo de registros além do escopo do aplicativo de inscrições.

Parece que você tem uma versão obsoleta de uma assembléia em torno de mentir em algum lugar, ou um velho NuGet dependência de versão.Tente limpar o seu bin/obj pastas e certifique-se de que todos os NuGet dependências são atualizadas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top