Unit Test Problem

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    Selam arkadaslar

    Xamarin.Forms ile yapilmis bir proje var. Ana proje'de bir constant tanimlayinca (project properties-> compiler-> define symbols da). oraya atiyorum yabancisurucu yaziyoruz ve proje icinde bazi kodlar/classlar o proje icin aktif oluyor. Bunu da conditional directive ile yapiyoruz

    #if yabancisurucu

     ----

    #else

     ----

    #endif

     

    seklinde. Tabi baska bir kac sey daha var ama onlar cok gerekli degil.

    Eger yabancisurucu constant olarak gelmisse, onun login metodu ayri, ama normalsurucu ise login metodu daha farkli.

    Simdi sorun ise unit test projesinde. Unit testler ayni solution altinda farkli bir proje'de yazilmis. 

    Ben ana projede yabancisurucu sectigimde, unit test projesinde bunun ne oldugunu anlayamiyorum. O yüzden normalsurucu login test metodu calisiyor. Benim o metodu calistirmamam ya da yabancisurucu metodunu cagirmam lazim.

    Yani iki proje arasinda (ana proje ve test proje) bu constant degeri bir sekilde tasimam gerekiyor.

     

    Simdi derseniz ki, test projesinde de bu constant'i olustur. O zaman da söyle bir problem var; bunlar push edildikten sonra teamcity'e gidiyor. Orada da build ediliyor. Ve orada sadece unit test'i cagirinca yabancisurucu constant'i tanimlasak bile, nasil ana projeye o constant'i verecegiz? Daha karisik bir yapiya evriliyor. O yüzden ilk anlattigim sekilde bu isi cözebilirsem benim icin harika olacak.

    Umarim anlasilmistir problem :) Fikirlerinizi bekliyorum.

     

    Not: Ana projede bir class var ve orada söyle bir sey yaptim

    #if yabancisurucu

     appRuntimeInfo.AppType = AppType.YabanciSurucu;

    #else

     appRuntimeInfo.AppType = AppType.NormalSurucu;

    #endif

     

    appRunTimeInfo'ya proje icinde erisiyorum (DI sagolsun) ve conditional directive yazmadan direk hangi tip oldugunu anliyorum.

    Bu degere test projesinde ulasmaya calistigimda bana hep NormalSurucu dönüyor nedense. Halbu ki define symbols'da yabancisurucu olarak ekli.. 


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    sonunda sorunu cözdük. 


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    2021 Talihlisi
    Deleted001
    Deleted001's avatar
    Kayıt Tarihi: 22/Kasım/2020
    Erkek
    unbalanced bunu yazdı

    sonunda sorunu cözdük. 

    kahkaha attım

    tebrik ederim de insan bari şunu böyle yapmak çözüm oldu yazar, kimseye faydası olmasa yarın döner bakar okur yaparsın hocam :D

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    yalinyalniz bunu yazdı
    unbalanced bunu yazdı

    sonunda sorunu cözdük. 

    kahkaha attım

    tebrik ederim de insan bari şunu böyle yapmak çözüm oldu yazar, kimseye faydası olmasa yarın döner bakar okur yaparsın hocam :D

    yazacaktim hocam da baya yoruldum, kac saattir bunla ugrasiyorduk. Aslinda burdan kimsenin pek isine yaracagini sanmam ama kisaca söyle

    bir tane customdefineconstants olusturduk hem debug hem unittest isminde bir configuration icin (csproj dosyasinda). 

    ve localde denerken de söyle yaptik

    build icin

    msbuild proje.sln /t:Clean,Restore,Build /p:Configuration=UnitTest /p:Platform="Any CPU"  /p:CustomDefineConstants=yabancisurucu

    dotnet test --configuration=UnitTest /p:Platform="Any CPU" /p:CustomDefineConstants=yabancisurucu

    bu sekilde calisiyor. Test projesinde 

    #if yabancisurucu

      Assert.True(True);

    #else

      // normal sürücü icin kodlar

    #endif

    yaptik, bu sekilde sorun olmadan yabancisurucu'yu aliyor.

    Isin team city tarafinda ise;

    build stepsler var, orada da build ve test admina üstteki kodlari ve parametreleri gectik.

    Otomatik olacagi icin /p:CustomDefineConstants=%env.AppType% seklinde yaptik ki build edilirken hangi tür oldugunu sectigimizde burdan otomatik alsin diye :)

    Burada dikkat edilmesi gereken önemli bir nokta ise; sln dosyasinda "Any CPU" seklinde yazilan platform, csproj'lerde AnyCPU seklinde yaziliyor. Bu tarz scriptler vs ugrasiyorsaniz bu farki gözetmeniz gerek. Eger sln (solution)'yi build edecekseniz platform' yazarken Any CPU seklinde olmali, csproj (project) build edecekseniz de platform verirseniz AnyCPU seklinde olmali. Benzer sikintiyi 7 yil önce de TFS'de benzer isleri yaparken yasamistim :)

    Sorun bu sekilde cözüldü. Tabi bu asamaya gelmek icin cok deneme yanilma yaptik ama olay bu :)

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
Toplam Hit: 1187 Toplam Mesaj: 4
unit test problem xamarin.forms visual studio