Aracılığıyla paylaş


Microsoft.Testing.Platform'a genel bakış

Microsoft.Testing.Platform, sürekli tümleştirme (CI) işlem hatları, CLI, Visual Studio Test Gezgini ve VS Code Test Gezgini dahil olmak üzere tüm bağlamlarda testleri çalıştırmak için VSTest basit ve taşınabilir bir alternatiftir. Microsoft.Testing.Platform doğrudan test projelerinize eklenir ve testlerinizi çalıştırmak için gereken vstest.console veya dotnet test gibi başka uygulama bağımlılığı yoktur.

Microsoft.Testing.Platform açık kaynaktır. Microsoft.Testing.Platform kodu microsoft/testfx GitHub deposunda bulabilirsiniz.

Microsoft.Testing.Platform sütunları

Bu yeni test platformu .NET Geliştirici Deneyimi Testi ekibinin deneyimi üzerine kurulmuştur ve .NET Core'un 2016'da piyasaya sürülmesinin ardından karşılaşılan zorlukları ele almayı amaçlamaktadır. .NET Framework ile .NET Core/.NET arasında yüksek düzeyde uyumluluk olsa da, eklenti sistemi ve .NET derlemelerinin yeni olası biçim faktörleri gibi bazı temel özellikler, geçerli VSTest platformu mimarisiyle yeni çalışma zamanı özelliğini geliştirmeyi veya tam olarak desteklemeyi karmaşık hale getirmektedir.

Yeni test platformunun evrimi için temel etmenler aşağıda ayrıntılı olarak yer alır:

  • Determinizm: Aynı testleri farklı bağlamlarda (yerel, CI) çalıştırmanın aynı sonucu üretmesini sağlamak. Yeni çalışma zamanı, bir test çalıştırmasını koordine etmek için yansımayı veya başka bir dinamik .NET çalışma zamanı özelliğini kullanmaz.

  • Çalışma Zamanı saydamlığı: Test çalışma zamanı test çerçevesi koduyla çakışmaz, AppDomain veya AssemblyLoadContextgibi yalıtılmış bağlamlar oluşturmaz ve yansıma veya özel derleme çözümleyicileri kullanmaz.

  • Uzantıların derleme zamanı kaydı: Test çerçeveleri ve işlem içi/dışı uzantılar gibi uzantılar, determinizmin sağlanması ve tutarsızlıkların algılanmasını kolaylaştırmak için derleme zamanında kaydedilir.

  • Sıfır bağımlılıkları: Platformun çekirdeği, desteklenen çalışma zamanlarından başka bağımlılığı olmayan tek bir .NET derlemesi Microsoft.Testing.Platform.dll.

  • Barındırılabilir: Test çalışma zamanı herhangi bir .NET uygulamasında barındırılabilir. Bir konsol uygulaması genellikle testleri çalıştırmak için kullanılırken, herhangi bir .NET uygulamasında bir test uygulaması oluşturabilirsiniz. Bu, sınırlamaların olabileceği cihazlar veya tarayıcılar gibi özel bağlamlar içinde testleri çalıştırmanıza olanak tanır.

  • tüm .NET form faktörlerini destekleyin: Yerel AOT dahil olmak üzere geçerli ve gelecekteki .NET form faktörlerini destekleyin.

  • Performant: Çalışma zamanını temel olmayan kodla şişirmemek için özellikler ve uzantı noktaları arasında doğru dengeyi bulma. Yeni test platformu, bunun nasıl yapılacağının uygulama ayrıntılarını sağlamak yerine bir test çalıştırmasını "düzenleme" için tasarlanmıştır.

  • Yeterince Genişletilebilir: Yeni platform, genişletme noktaları üzerine kurularak çalışma zamanı yürütmesinin maksimum düzeyde özelleştirilmesine olanak tanır. Test işlemi ana bilgisayarını yapılandırmanıza, test işlemini gözlemlemenize ve test ana bilgisayarı işlemi içindeki test çerçevesindeki bilgileri kullanmanıza olanak tanır.

  • Tek modül dağıtımı: Barındırılabilirlik özelliği, tek bir modül dağıtım modelini etkinleştirir. Burada tek bir derleme sonucu, farklı yürütülebilir modülleri göndermeye gerek kalmadan hem işlem dışı hem de işlem içi tüm genişletilebilirlik noktalarını desteklemek için kullanılabilir.

Desteklenen test çerçeveleri

  • MSTest. MSTest'te, Microsoft.Testing.Platform desteği MSTest çalıştırıcısıaracılığıyla gerçekleştirilir.
  • NUnit. NUnit'de, Microsoft.Testing.Platform desteği NUnit çalıştırıcısıaracılığıyla gerçekleştirilir.
  • xUnit.net: xUnit.net içinde, Microsoft.Testing.Platform desteği xUnit.net çalıştırıcısıaracılığıyla sağlanır.
  • TUnit: tamamen Microsoft.Testing.Platformüzerinde oluşturuldu. Daha fazla bilgi için TUnit belgelerine bakın.

Testleri çalıştırma ve hatalarını ayıklama

Microsoft.Testing.Platform test projeleri doğrudan çalıştırılabilir (veya hata ayıklanabilir) yürütülebilir dosyalar olarak oluşturulur. Ek bir test çalıştırma konsolu veya komutu yoktur. Çoğu yürütülebilir dosya için tipik olan bir hata varsa, uygulama sıfır olmayan bir çıkış koduyla çıkar. Bilinen çıkış kodları hakkında daha fazla bilgi için bkz. Microsoft.Testing.Platform çıkış kodları.

Tavsiye

komut satırı seçeneğini kullanarak belirli bir --ignore-exit-code yoksayabilirsiniz.

ayrıca, TestingPlatformCommandLineArguments MSBuild özelliğini kullanarak proje dosyasındaki belirli bir test projesine uygulanan komut satırı seçeneklerini de ayarlayabilirsiniz. Test oturumunda tüm testlerin yoksayıldığı ve normalde çıkış kodu 8 ile sonuçlanan (test oturumu hiç test çalıştırmadı) test projeleri, yaygın kullanım örneklerinden biridir. Bu senaryoda, proje dosyanızdaki bir PropertyGroup altına aşağıdakileri ekleyebilirsiniz:

<TestingPlatformCommandLineArguments>$(TestingPlatformCommandLineArguments) --ignore-exit-code 8</TestingPlatformCommandLineArguments>

Önemli

Varsayılan olarak, Microsoft.Testing.Platform telemetri toplar. Vazgeçme hakkında daha fazla bilgi ve seçenekler için bkz. Microsoft.Testing.Platform telemetri.

test projesini dotnet publish kullanarak yayımlamak ve uygulamayı doğrudan çalıştırmak, testlerinizi çalıştırmanın başka bir yoludur. Örneğin, ./Contoso.MyTests.exe'ı çalıştırma. Bazı senaryolarda yürütülebilir dosyayı üretmek için dotnet build kullanmak da mümkün olsa da, Native AOTgibi göz önünde bulundurulması gereken uç durumlar olabilir.

dotnet run kullanma

test projenizi derlemek ve çalıştırmak için dotnet run komutu kullanılabilir. Bu, bazen en yavaş olsa da testlerinizi çalıştırmanın en kolay yoludur. Test projesinin gerektiğinde yeniden oluşturulmasını sağladığından, testleri yerel olarak düzenlerken ve çalıştırırken dotnet run kullanmak pratik bir işlemdir. dotnet run, projeyi otomatik olarak geçerli klasörde de bulur.

dotnet run --project Contoso.MyTests

dotnet runhakkında daha fazla bilgi için bkz. dotnet run.

dotnet exec kullanma

dotnet exec veya dotnet komutu, önceden oluşturulmuş bir test projesini yürütmek (veya çalıştırmak) için kullanılır; bu, uygulamayı doğrudan çalıştırmaya alternatiftir. dotnet exec, yerleşik test projesi dll'sinin yolunu gerektirir.

dotnet exec Contoso.MyTests.dll

ya da

dotnet Contoso.MyTests.dll

Uyarı

Test projesi yürütülebilir dosyasının (*.exe) yolunun sağlanması bir hatayla sonuçlanır:

Error:
  An assembly specified in the application dependencies manifest
  (Contoso.MyTests.deps.json) has already been found but with a different
  file extension:
    package: 'Contoso.MyTests', version: '1.0.0'
    path: 'Contoso.MyTests.dll'
    previously found assembly: 'S:\t\Contoso.MyTests\bin\Debug\net8.0\Contoso.MyTests.exe'

dotnet exechakkında daha fazla bilgi için bkz. dotnet exec .

dotnet test kullanma

Microsoft.Testing.Platform, yeni yürütme senaryosunu etkinleştirirken testlerinizi daha önce olduğu gibi çalıştırabilmenizi sağlayan vstest.console.exe ve dotnet test ile bir uyumluluk katmanı sunar.

dotnet test Contoso.MyTests.dll

Seçenekler

Aşağıdaki listede yalnızca platform seçenekleri açıklanmıştır. Her uzantının getirdiği belirli seçenekleri görmek için uzantı belgeleri sayfasına bakın veya --help seçeneğini kullanın.

  • @

    Yanıt dosyasının adını belirtir. Yanıt dosyası adı, @ karakteri ile yanıt dosyası adı arasında boşluk olmadan @ karakterini hemen izlemelidir.

    Yanıt dosyasındaki seçenekler, komut satırında o konumdaymış gibi yorumlanır. Yanıt dosyasındaki her bağımsız değişkenin aynı satırda başlaması ve bitmesi gerekir. Çizgileri birleştirmek için ters eğik çizgi karakterini () kullanamazsınız. Yanıt dosyası kullanmak, terminal sınırlarını aşabilecek çok uzun komutlar için yardımcı olur. Yanıt dosyasını satır içi komut satırı argümanlarıyla birleştirebilirsiniz. Örneğin:

    ./TestExecutable.exe @"filter.rsp" --timeout 10s
    

    burada filter.rsp aşağıdaki içeriklere sahip olabilir:

    --filter "A very long filter"
    

    Ya da tek bir rsp dosyası hem zaman aşımını hem de filtreyi aşağıdaki gibi belirtmek için kullanılabilir:

    ./TestExecutable.exe @"arguments.rsp"
    
    --filter "A very long filter"
    --timeout 10s
    
  • --config-file

    bir testconfig.json dosyası belirtir.

  • --diagnostic

    Tanı günlük kaydı etkinleştirir. Varsayılan kayıt düzeyi Trace. Dosya çıktı dizininde aşağıdaki ad biçiminde yazılır log_[MMddHHssfff].diag.

  • --diagnostic-filelogger-synchronouswrite

    Yerleşik dosya günlükçüsüsünü zaman uyumlu bir şekilde günlükleri yazmaya zorlar. İşlemin çöktüğü durumlarda (yani günlük girdilerini kaybetmek istemediğiniz senaryolarda) kullanışlıdır. Bu, test yürütmeyi yavaşlatır.

  • --diagnostic-output-directory

    Tanılama günlüğünün çıkış dizini belirtilmezse, dosya varsayılan TestResults dizininde oluşturulur.

  • --diagnostic-output-fileprefix

    Günlük dosyası adı için önek. Varsayılan olarak "log_".

  • --diagnostic-verbosity

    --diagnostic anahtarı kullanıldığında ayrıntı seviyesini tanımlar. Kullanılabilir değerler Trace, Debug, Information, Warning, Errorveya Critical' dır.

  • --exit-on-process-exit

    Bağımlı süreç sona ererse test sürecinden çıkın. PID sağlanmalıdır.

  • --help

    komutunun nasıl kullanılacağına ilişkin bir açıklama yazdırır.

  • --ignore-exit-code

    Sıfır olmayan bazı çıkış kodlarının yoksayılmasına ve bunun yerine 0olarak döndürülmesini sağlar. Daha fazla bilgi için bkz. Belirli Çıkış Kodlarını Yoksayma.

  • --info

    .NET Test Uygulaması hakkında aşağıdaki gibi gelişmiş bilgileri görüntüler:

    • Bu platform.
    • Ortam.
    • Her kayıtlı komut satırı sağlayıcısı, örneğin name, version, description ve options gibi.
    • Her kayıtlı araç, örneğin command, name, version, descriptionve tüm komut satırı sağlayıcıları gibi.

    Bu özellik, aynı komut satırı seçeneğini kaydeden uzantıları veya bir uzantının (veya platformun) birden çok sürümü arasındaki kullanılabilir seçeneklerdeki değişiklikleri anlamak için kullanılır.

  • --list-tests

    Kullanılabilir testleri listeleyin. Testler yürütülmeyecek.

  • --maximum-failed-tests

    Belirli bir sayıya ulaşıldığında test çalıştırmasını durduracak maksimum test hatası sayısını tanımlar. Bu anahtar desteği için çerçeve yazarlarının IGracefulStopTestExecutionCapability özelliğini uygulaması gerekir. Bu miktarda test hatasına ulaşıldığında çıkış kodu 13'tür. Daha fazla bilgi için bkz. microsoft.testing.platform çıkış kodları .

    Uyarı

    Bu özellik, 1.5 sürümünden itibaren Microsoft.Testing.Platform'da kullanılabilir.

  • --minimum-expected-tests

    Çalıştırılması beklenen en az test sayısını belirtir. Varsayılan olarak, en az bir testin çalıştırılması beklenir.

  • --results-directory

    Test sonuçlarının yerleştirileceği dizin. Belirtilen dizin yoksa oluşturulur. Varsayılan değer, test uygulamasını içeren dizinde TestResults.

  • --timeout

    Küresel test yürütme zaman aşımı. Bir bağımsız değişkeni, <value>[h|m|s] biçiminde bir dizge olarak alır ve burada <value> kayan sayıdır.

MSBuild entegrasyonu

Microsoft.Testing.Platform.MSBuild NuGet paketi, MSBuild ile Microsoft.Testing.Platform için çeşitli tümleştirmeler sağlar:

  • dotnet testiçin destek. Daha fazla bilgi için dotnet test ile test etme kısmına bakın.
  • ProjectCapability ve Visual Studio Test Gezgini tarafından gereksinim duyulan Visual Studio Code desteği.
  • Giriş noktasının otomatik olarak oluşturulması (Main yöntemi).
  • Yapılandırma dosyasının otomatik olarak oluşturulması.

Uyarı

Bu tümleştirme geçişli bir şekilde çalışır (bu pakete başvuran başka bir projeye başvuran bir proje pakete başvuruyor gibi davranır) ve IsTestingPlatformApplication MSBuild özelliği aracılığıyla devre dışı bırakılabilir.

Ayrıca bkz.