Automapper w testach inicjalizuję się podwójnie

Odpowiedz Nowy wątek
2018-06-19 09:04
0

Gdy odpale pojedyczny test to wszystko dziala jak nalezy, ale gdy odpalam testy dla calej solucji (czy projektu) to wtedy niektore testy rzucaja
Message: System.InvalidOperationException : Mapper already initialized. You must call Initialize once per application domain/process.

oczywiscie rozumiem bład, ale chcialbym rozwiazac go w jakis cywylizowany sposob, a takich pomyslow mi brak

kombinowalem na rozne sposoby

1) Inicjalizowalem automappera zgodnie z dokumentacja (stworzenie Fixture dla kazdego obiektu)

 public class MapperFixture
    {
        public MapperFixture()
        {
            Mapper.Initialize(cfg =>
            {
                cfg.AddProfile<PackageProfile>();
            });
        }

    }

    public class TestPackageProfile : IClassFixture<MapperFixture>
    {

        public TestPackageProfile(MapperFixture mapperFixture)
        {
        }

2) stworzenie Shared Fixture (do wszystkich testow uzywalem tego samego fixture)
3) dodanie flagi wasinitialized i stworzenie MapperInitializer który jest statycznym obiektem i jest wywolywany w normalnie jako funkcja
4) zgodnie z dokumentacja automappera napisalem cos takiego

public class MapperInitialize
    {
        public void Initialize()
        {
            lock(this)
            {
                Mapper.Reset();
                Mapper.Initialize(cfg =>
                    {
                        cfg.AddProfile<PackageProfile>();
                    });
                    Mapper.Configuration.CompileMappings();

            }

        }
    }

zadne z 4 sposobow nie dziala, moze cos po drodze skopalem implementujac, ale nie widze zadnego bledu

edytowany 2x, ostatnio: fasadin, 2018-06-19 11:14
znalazlem rozwiazanie, ale mi sie nie podoba. Jak znajde jakies lepsze to odpisze w temacie - fasadin 2018-06-19 12:30

Pozostało 580 znaków

2018-06-19 14:43
1

W NUnit mam po prostu takie coś w assembly z testami:

[SetUpFixture]
public class GlobalSetUp
{
   [OneTimeSetUp]
   public void ConfigureAutomapper()
   {
       Mapper.Initialize(configuration =>
       {
           // inicjalizacja
       });
   }
}

"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
no wlasnie XUnit nie ma globalnego zadnego globalnego atrybutu. https://xunit.github.io/docs/shared-context mozna robic to co jest tutaj napisane... ale to nie dziala :D - fasadin 2018-06-28 15:52

Pozostało 580 znaków

2018-06-28 21:20
0

@fasadin: na temat wątku piszemy w postach, a nie w komentarzach.

Spróbuj może z tym: https://github.com/Fody/ModuleInit


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2018-06-28 22:24
._.
0

Nigdy nie zrozumiem ludzi, którzy potrzebę używania XUnit'a argumentują tym, że jest tam milion assercji, oraz tych zabawnych atrybutów jak theory, fact ;)

public TestPackageProfile(MapperFixture mapperFixture)

Nie, widze, żadnej metody ani klasy statycznej. Nie rozumiem, dlaczego chcesz tutaj wstrzykiwać ten mapper...?

Możesz zrobić np. Singletona i odpalać go w każdym teście, który potrzebuje mappera (wedle uznania...).

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0