none
[Test Unitaire] Impossible d'executer un test sur une assembly creee a partir de netmodule RRS feed

  • Question

  • Bonjour,

    Je suis face a un problème qui me bloque depuis plusieurs jours ce pourquoi je sollicite ce forum.
    J'ai réussi a isoler un cas test simple qui reproduit systématiquement le problème.
    • L'assembly en question est une assembly pour interfacer une bibliothèque d'objets C++ écrite majoritairement en C++/CLI.J'ai une librairie native C++ qui représente ma bibliothèque existante.
    • J'ai un module .NET écrit en C++/CLI qui utilise des objets de la librairie C++.
    • J'ai une assembly générée a partir du module.
    L'assembly generee est valide puisque je peux l'utiliser dans une application .NET.
    Par contre lorsque celle-ci est referencee dans un projet de test, impossible de faire executer un test.
    J'ai systematiquement l'exception:

    Test method TestProject1.UnitTest2.TestMethod1 threw exception:  System.TypeInitializationException: Une exception a été levée par l'initialiseur de type pour '<Module>'. --->  <CrtImplementationDetails>.ModuleLoadException: The C++ module failed to load while attempting to initialize the default appdomain.
     --->  System.BadImageFormatException: Le module était censé contenir un manifeste de l'assembly. (Exception de HRESULT : 0x80131018).
    // TestModule.h

    #pragma once

    #include "../ClassLibrary/ClassLibrary.h"

    using namespace System;

    namespace TestModule {

    public ref class Class1
    {
    // TODO: Add your methods for this class here.
    };
    }

    #pragma unmanaged
    public class NativeClass
    {
    private:
    static CClassLibrary staticDataMember;
    };
    #pragma managed

    // TestModule.cpp
    // This is the main DLL file.

    #include "stdafx.h"

    #include "TestModule.h"

    #pragma unmanaged

    CClassLibrary NativeClass::staticDataMember;

    #pragma managed
    J'ai genere mon assembly en utilisant al.exe et csc.exe avec le meme resultat

    • Si je supprime la declaration du membre statique dans le module je n'ai plus l'exception et mon test se deroule bien. J'ai besoin dans mon module de definir des objets natifs pour faire de l'interoperabilite.
    • Si je compile le module en assembly en conservant la declaration du membre statique, plus d'exception et le test est Ok. En situation, j'utilise deux langages donc je dois conserver mon decoupage; et un decoupage en module car je souhaite avoir au resultat qu'une seule assembly.
    • Si j'execute mon test en ligne de commande avec mstest.exe et le switch /noisolation, plus d'exception et le test est Ok. Par contre cette solution n'est pas acceptable car je n'ai plus acces a l'analyse de code.
    Je ne peux malheureusement pas mettre mon cas test en pièce jointe.
    Test effectue sous Windows XP-pro SP3 32 bits avec Visual Studio 2008.

    Une idée ?

    Merci.
    • Type modifié dgedge33 vendredi 17 juillet 2009 10:07 erreur
    • Type modifié Gabriel MongeonModerator vendredi 17 juillet 2009 13:15 C'est plus une question qu'un commentaire
    vendredi 17 juillet 2009 10:06

Toutes les réponses

  • Bonjour,

    Dans votre cas est-il possible que vous puissiez afficher des informations sur l'exception interne de l'exception "TypeInitializationException" ? Ainsi vous comprendrez mieux d'où vient l'origine du problème.

    Cordialement
    Gilles TOURREAU - MVP C#
    dimanche 26 juillet 2009 12:28
    Modérateur