Aynı projeye veya başka bir projeye birim testleri yapıyor musunuz?


137

Ünite testlerini kolaylık sağlamak için aynı projeye mi koyuyorsunuz yoksa ayrı bir montaja mı koyuyorsunuz?

Onları bizim gibi ayrı bir toplantıya koyarsanız, çözümde bir dizi ekstra proje ile sonuçlanırız. Kodlama sırasında birim testi için harikadır, ancak uygulamayı tüm bu ek montajlar olmadan nasıl bırakırsınız?

Yanıtlar:


100

Bence, birim testleri üretim kodundan ayrı bir montaja yerleştirilmelidir. Ünite testlerini üretim koduyla aynı montaj veya montajlara yerleştirmenin sadece birkaç eksisi şunlardır:

  1. Birim testleri üretim kodu ile gönderilir. Ürün koduyla birlikte gönderilen tek şey üretim kodudur.
  2. Montajlar gereksiz yere birim testlerle şişirilecektir.
  3. Birim testleri, otomatik veya sürekli oluşturma gibi derleme süreçlerini etkileyebilir.

Hiçbir profesyonel bilmiyorum. Fazladan bir projeye (ya da 10'a) sahip olmak bir iş değildir.

Edit: Yapı ve Nakliye Hakkında Daha Fazla Bilgi

Ayrıca herhangi bir otomatik inşa süreci üretiminin ve birim testlerinin farklı konumlara yerleştirilmesini tavsiye ederim. İdeal olarak, birim sınama oluşturma işlemi yalnızca üretim kodu oluşturulursa ve ürün dosyalarını birim sınamalar dizinine kopyalarsa çalışır. Bu şekilde yapmak, gerçek bitlerin nakliye vb. İçin ayrılmasına neden olur. Ayrıca, belirli bir dizindeki tüm testlerde bu noktada otomatik birim sınaması yapmak oldukça önemlidir.

Özetlemek gerekirse, bitlerin ve diğer dosyaların günlük olarak oluşturulması ve test edilmesi ve gönderilmesi için genel fikir:

  1. Üretim derlemeleri, üretim dosyalarını belirli bir "üretim" dizinine yerleştirerek çalışır.
    1. Yalnızca üretim projeleri oluşturun.
    2. Derlenen bitleri ve diğer dosyaları bir "üretim" dizinine kopyalayın.
    3. Bitleri ve diğer dosyaları bir sürüm aday dizinine kopyalayın, yani Noel sürümü dizini "Release20081225" olacaktır.
  2. Üretim derlemesi başarılı olursa, birim test derlemesi çalışır.
    1. Üretim kodunu "testler" dizinine kopyalayın.
    2. "Testler" dizinine birim testleri oluşturun.
    3. Birim sınamalarını çalıştırın.
  3. Yapı bildirimleri ve birim testleri sonuçlarını geliştiricilere gönderin.
  4. Bir sürüm adayı (Release20081225 gibi) kabul edildiğinde, bu bitleri gönderin.

15
IMO listelediğiniz eksileri her zaman geçerli değildir. Aynı proje için bir profesyonel, test edilen sınıf + testlerin daha kolay gruplandırılmasıdır - bu küçük kolaylıklar testleri yazarken uzun bir yol kat eder. Kişisel tercih burada kazanıyor ve bazen puanlarınız her zaman değil, alakalı.
orip

7
Öncelikle sevkıyat sırasında testleri kaldırmanız gerekip gerekmediğini sormalısınız. Evetse, ayrı bir projeye ihtiyacınız var. Değilse, karar vermek için diğer artılarını ve eksilerini kullanın. Testleri uygulayamadıklarını düşünen insanlar varsayılan olarak her zaman "ayrı proje" sonucuna ulaşacaktır.
Mart'ta

7
Birim testleri gibi üretim dışı kodların gönderilmesinde herhangi bir artış görmüyorum ve birçok dezavantajı var. Nakliye birimi testleri, dağıtılması gereken daha fazla bitle uğraştığınız anlamına gelir. Birim testleri ayrıca ayrı bir bağımlılık kümesine sahiptir. Şimdi NUnit, Rhino veya Moq, vb. Gönderiyorsunuz. Bu daha da fazla şişkinlik. Birim testlerini ayrı bir projeye yerleştirmek sadece az miktarda çaba gerektirir ve bu bir kerelik bir maliyettir. Birim testlerinin gönderilmemesi gerektiği sonucuna varmaktan çok memnunum.
Jason Jackson

4
Üretim kodundaki birim testlerini kaldırmak için "ayrı proje" yaklaşımına alternatif olarak, özel bir sembol ve derleyici yönergeleri gibi düşünün #if. Bu özel sembol, CI yazılım komut dosyalarınızdaki derleyici komut satırı parametreleri kullanılarak değiştirilebilir. Bkz. Msdn.microsoft.com/en-us/library/4y6tbswk.aspx .
Zengin C

23
.NET, tamamen ayrı bir projede testler yapma eğrisinin arkasındadır ve bunun yakında değişeceğine bahse girerim. Derleme işleminin sürüm derlemesindeki test kodunu yok saymak için yapılamamasının bir nedeni yoktur. Bunu yapan birkaç web uygulaması oluşturucu kullandım. Ben aynı dosya hiyerarşisi biber biber tarif ettikleri kod dosyalarının yanında birim test kod dosyalarının dahil etmek kesinlikle daha iyi olduğunu düşünüyorum. Google, 'fraktal' dosya organizasyonu olarak adlandırılan bunu önerir. Testler neden satır içi yorumlardan ve benioku belgelerinden farklıdır? Derleyici ikincisini memnuniyetle göz ardı eder.
Brandon Arnold

112

Ayrı proje, ama aynı çözümde. (Test ve üretim kodu için ayrı çözümlere sahip ürünler üzerinde çalıştım - bu korkunç. Her zaman ikisi arasında geçiş yapıyorsunuz.)

Ayrı projelerin nedenleri diğerleri tarafından belirtildiği gibidir. Veriye dayalı testler kullanıyorsanız, testleri üretim montajına dahil ederseniz oldukça önemli miktarda şişkinlik yaşayabileceğinizi unutmayın.

Üretim kodunun dahili üyelerine erişmeniz gerekiyorsa InternalsVisibleTo kullanın .


+1: Ana kodla aynı projede birim testlerle yeni karşılaştım ve bir adlandırma kuralı takip edilmiş olsa bile gerçek kod arasındaki testleri bulmak zor.
Fenton

32
Daha az deneyimli okuyucu için bu [assembly:InternalsVisibleTo("UnitTestProjectName")], proje AssemblyInfo.csdosyanıza eklediğiniz anlamına gelir .
Margus

Çok yararlı ek Margus. Jon'a bu bağlamda InternalsVisibleTo'dan bahsettiği için teşekkürler.
Bjørn Otto Vasbotten

1
@jropella: Ürün montajını imzalıyorsanız, yalnızca dahili parçaları imzalanmış montajlar için görünür hale getirebilirsiniz. Ve elbette herhangi bir kodu tam güvenle çalıştırıyorsanız, yansıma yoluyla erişime sahipler ...
Jon Skeet

2
@jropella: Yansıma yine de InternalsVisibleTo ile ilgilenmiyor ... ama InternalsVisibleTo kullanarak imzasız bir montaja güvenen imzalı bir montaj göremezsiniz , çünkü bu derleme zamanında önlenir.
Jon Skeet

70

Testleri üretim koduyla dağıtmaya yönelik sık sık itiraz etmiyorum. Küçük bir mikrokapta bir takım yönettim (14 ila 130 kişi arasında büyüdüm). Yarım düzine kadar Java uygulamamız vardı ve bunları bir uygulamada yürütmek için son derece değerli bulduk. belirlialışılmadık davranış sergileyen makine. Sahada rastgele problemler meydana gelir ve sıfır maliyetle gizemde birkaç bin birim test yapabilmek paha biçilemezdi ve dakikalar içinde sıklıkla teşhis edilen problemler ... kurulum sorunları, pul pul RAM sorunları, makineye özgü sorunlar, pul pul ağ sorunları, vs, vb. Bence sahaya testler yapmak son derece değerli. Ayrıca, rastgele problemler rastgele zamanlarda ortaya çıkar ve orada oturan birim testlerinin bir an önce gerçekleştirilmesini beklemek güzeldir. Sabit disk alanı ucuzdur. Verileri ve işlevleri bir arada tutmaya çalıştığımız gibi (OO tasarımı), kod ve testleri bir arada tutmak için temel olarak değerli bir şey olduğunu düşünüyorum (işlevleri doğrulayan işlev + testler).

Testlerimi aynı projeye C # /. NET / Visual Studio 2008'de koymak istiyorum, ancak bunu başarmak için hala yeterli araştırma yapmadım.

Foo.cs'i FooTest.cs ile aynı projede tutmanın en büyük yararı, geliştiricilerin bir sınıfta bir kardeş testi eksik olduğunda sürekli olarak hatırlatılmasıdır! Bu daha iyi test odaklı kodlama uygulamalarını teşvik eder ... delikler daha belirgindir.


17
Entegrasyon testleri ile birim testleri için bunun ne kadar değerli olacağını görebiliyorum. Bunları doğru yazarsanız, makineye bağımlılıkları olmamalıdır.
Joel McBeth

+1 katılıyorum. Çoğunlukla .NET yaptığım gibi, üretim kodu ile nakliye testi de derleme ve testin sürekli entegrasyon adımını azaltmanın güzel yan etkisine sahiptir: 1) Sadece yarım proje inşa etmek, 2) ana uygulama yerine tüm test montajları böylece test koşucunuzu parametreleştirmek daha kolaydır. Maven kullanırken bu argüman elbette geçerli değildir. Son olarak, müşterilerim daha teknik kişilerdir ve mevcut durumu spesifikasyonlara göre belgelediği için testleri kendileri gerçekleştirmeyi gerçekten seviyorlar.
mkoertgen

TDD / BDD tarzında entegrasyon testi yapmak, NUnit, xUnit vb. Standart test koşucularla kolayca otomatikleştirilebilen test kodu yazmak için mükemmel bir anlam olduğunu düşünüyorum. Tabii ki, üniteyi entegrasyon testi ile karıştırmamalısınız. Yapım doğrulaması (BVT) için hangi test grubunun hızlı ve sık çalışacağını ve entegrasyon testi için hangilerinin olduğunu bildiğinizden emin olun.
mkoertgen

1
İnsanların buna itiraz etmesinin nedeni alışık oldukları şey değil. İlk deneyim birimi testleri, üretim kodunun içinde olsaydı, aslında programlama dilinde bir testin bir üretim yöntemiyle ilişkili olduğunu gösteren spesifik sözdizimiyle olsaydı, bunun geliştirme iş akışının paha biçilmez bir yönü olduğuna yemin ederlerdi. ve onları ayrı bir projeye koymak kesinlikle çılgınca. Çoğu geliştirici böyle. Takipçiler.
14'te

19

Daha iyi kapsülleme elde etmek için Birim testlerini kodla aynı projeye koyun.

Dahili yöntemleri kolayca test edebilirsiniz, bu da dahili olması gereken yöntemleri herkese açık hale getirmeyeceğiniz anlamına gelir.

Ayrıca, birim testlerinin yazdığınız koda yakın olması gerçekten güzel. Bir yöntem yazdığınızda, aynı projede olduğu için ilgili birim testlerini kolayca bulabilirsiniz. UnitTest içeren bir derleme oluşturduğunuzda, unitTest'teki tüm hatalar size bir derleyici verir, bu nedenle unittest'inizi sadece inşa etmek için güncel tutmanız gerekir. Ayrı bir projede unittest'e sahip olmak, bazı geliştiricilerin unittest projesini oluşturmayı unutmasına ve bir süre kırık testleri kaçırmasına neden olabilir.

Derleme etiketlerini (IF #Debug) kullanarak birim testlerini üretim kodundan kaldırabilirsiniz.

Otomatik Entegrasyon Testleri (i NUnit) tek bir projeye ait olmadığından ayrı bir projede olmalıdır.


1
Ancak bu, Releaseyapı üzerinde testler yapamayacağınız ve birkaç "heisenbugs" ın düşebileceği anlamına gelir .
2013'te

3
Arkadaş montajlarıyla ( msdn.microsoft.com/en-us/library/0tke9fxk.aspx ) kullanarak InternalsVisibleTo, ayrı bir test projesinden dahili yöntemleri test etmenizi sağlar
ParoX

3
@hlpPy - isteğe bağlı koşullu derleme sembollerini yapılandırabilir ve 2'den fazla derleme yapılandırmanız olabilir. Örneğin; aklınıza gelebilecek Debug, Approvalve Release; ve tüm sürüm optimizasyonlarıyla onay derleyin. Ayrıca, tipik olarak birim testleri ilk etapta heisenbug'ları tespit etmekte çok iyi değildir (benim durumumda). Bunlar için spesifik entegrasyon regresyon testlerine ihtiyacınız vardır - ve bunları yan yana yerleştirebilirsiniz.
Eamon Nerbonne

Ayrı bir proje aynı derleme zamanı hatasını verir. Eğer kodun derinliklerine girmeniz gerekiyorsa, hack birimi kodunuzda testlerden daha fazla soyutlamaya ihtiyacınız olduğu gibi geliyor. Kodları değiştirmek için kodunuzdaki koşullara güvenmek de iyi değildir. Daha çok Birim ve Entegrasyon testleri gibi görünüyor.
Nick Turner

12

Testlerin genellikle test ettikleri kodun yanında bir dosyaya yerleştirildiği TypeScript projelerinde biraz zaman geçirdikten sonra, bu yaklaşımı ayrı tutmak yerine tercih ettim:

  • Test dosyasına gitmek daha hızlıdır.
  • Test edilen sınıfı yeniden adlandırdığınızda testleri yeniden adlandırmayı hatırlamak daha kolaydır.
  • Test edilen sınıfı taşıdığınızda testleri taşımayı hatırlamak daha kolaydır.
  • Bir sınıfın testleri eksik olup olmadığı hemen açıktır.
  • Biri testler ve diğeri kod için olmak üzere iki kopya dosya yapısını yönetmenize gerek yoktur.

Son zamanlarda yeni bir .NET Core projesine başladığımda son sürümle birlikte testleri veya test montajlarını göndermeden bir C # projesinde bu yapıyı taklit etmenin mümkün olup olmadığını görmek istedim.

Proje dosyasına aşağıdaki satırları koymak şimdiye kadar iyi çalışıyor gibi görünüyor:

  <ItemGroup Condition="'$(Configuration)' == 'Release'">
    <Compile Remove="**\*.Tests.cs" />
  </ItemGroup>
  <ItemGroup Condition="'$(Configuration)' != 'Release'">
    <PackageReference Include="nunit" Version="3.11.0" />
    <PackageReference Include="NUnit3TestAdapter" Version="3.12.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
  </ItemGroup>

Yukarıdakiler, Releaseyapılandırmada adlı tüm dosyaların*.Tests.cs derlemeden hariç tutulmasını ve ayrıca gerekli birim test paketi referanslarının kaldırılmasını sağlar.

Sınıfları yayın yapılandırmalarında birim olarak test edebilmek istiyorsanız, sadece Releaseböyle bir şeyden türetilen yeni bir yapılandırma oluşturabilirsiniz ReleaseContainingTests.


Güncelleme: Bu tekniği bir süre kullandıktan sonra, testleri (ve diğer şeyleri) kaşif bölmesinde biraz daha öne çıkarmak için VS Code'daki simgelerinizi özelleştirmenin yararlı olduğunu gördüm:

VS Kodu Ekran Görüntüsü

Bunu yapmak için Malzeme Simgesi Tema uzantısını kullanın ve VS Kod tercihleriniz JSON'a aşağıdakine benzer bir şey ekleyin:

"material-icon-theme.files.associations": {
  "*.Tests.cs": "test-jsx",
  "*.Mocks.cs": "merlin",
  "*.Interface.cs": "yaml",
}

Tam olarak ne yapmaya başladık
Matthew Steeples

.Net standart sınıf kütüphanelerinde de çalıştınız mı?
Zenuka

10

Birim testlerim her zaman ayrı bir projede yapılır. Aslında, benim çözümümdeki her proje için, onunla birlikte gelen ayrı bir test projesi var. Test kodu uygulama kodu değildir ve kodla karıştırılmamalıdır. Bunları ayrı projelerde tutmanın bir avantajı - en azından TestDriven.Net kullanarak - bir test projesine sağ tıklayıp tüm proje testlerini çalıştırarak, tüm uygulama kod kütüphanesini tek bir tıklama ile test edebilmemdir.


1
Öyleyse iç sınıfları nasıl test ediyorsunuz? Yoksa sadece devlet sınıflarını mı test ediyorsunuz?
user19371

7
<assembly: InternalsVisibleTo = "TestProject" /> gerekirse, ancak genellikle yalnızca ortak arabirimleri test ediyorum.
tvanfosson

@tvanfosson, Specs (Specflow) ile neler yapıyorsunuz? Ayrı bir projeniz mi olur yoksa Birim Test projesine mi koyarsınız? +1.
w0051977

@ w0051977 Hiç Specflow kullanmadım, bu yüzden bilmiyorum
tvanfosson

@tvanfosson, entegrasyon testleri ne olacak? Onları birim testlere ayrı bir projeye yerleştirir misiniz?
w0051977

10

Eğer NUnit çerçeve kullanılır, aynı projede testleri koymak için ek bir neden yoktur. Aşağıdaki birim testlerle karıştırılmış üretim kodu örneğini göz önünde bulundurun:

public static class Ext
{
     [TestCase(1.1, Result = 1)]
     [TestCase(0.9, Result = 1)]
     public static int ToRoundedInt(this double d)
     {
         return (int) Math.Round(d);
     }
}

Buradaki birim testleri, test edilen koda ilişkin dokümantasyon ve spesifikasyon işlevi görür. Ayrı bir projede yer alan testlerle, kendini belgelemenin bu etkisine nasıl ulaşılacağını bilmiyorum. Fonksiyonun kullanıcısı, olası olmayan bu test senaryolarını görmek için testleri aramalıdır.

Güncelleme : Böyle bir TestCaseöznitelik kullanımının NUnit geliştiricilerinin istediği olmadığını biliyorum, ama neden olmasın?


2
Bu fikri seviyorum; kodla birlikte burada birkaç girdi ve beklenen çıktı örneği var.
Preston McCormick

3

Aynı proje ile farklı projeler arasında dalgalanıyorum.

Test kodunu üretim koduyla serbest bırakmak bir kütüphane yayınlıyorsanız, bir problemdir, aksi takdirde genellikle olmadığını düşünüyorum (denemeden önce güçlü bir psikolojik engel olsa da).

Testleri aynı projeye koyarken, testler ve test ettikleri kod arasında geçiş yapmayı ve bunları yeniden düzenlemeyi / hareket ettirmeyi daha kolay buluyorum.


3

Onları ayrı projelere koydum. Derlemenin adı, bizim için genel bir kural olarak, ad alanlarının adını yansıtır. Company.Product.Feature.sln adlı bir proje varsa, Company.Product.Feature.dll çıktı (derleme adı) vardır. Test projesi, Company.Product.Feature.Tests.sln, Company.Product.Feature.Tests.dll dosyasını verir.

Bunları tek bir çözümde tutmanız ve çıktıyı Configuration Manager üzerinden kontrol etmeniz en iyisidir. Varsayılan hata ayıklama ve bırakma yerine ana dalların her biri (Geliştirme, Entegrasyon, Üretim) için adlandırılmış bir yapılandırmaya sahibiz. Yapılandırma ayarlarınızı yaptıktan sonra Yapılandırma Yöneticisi'ndeki "Oluştur" onay kutusunu tıklayarak bunları ekleyebilir veya hariç tutabilirsiniz. (Configuration Manager'ı almak için, çözümü sağ tıklatın ve Configuration Manager'a gidin.) Not: CM'yi Visual Studio'da zaman zaman buggy olarak bulduğumu unutmayın. Birkaç kez, oluşturduğu hedefleri temizlemek için proje ve / veya çözüm dosyalarına girmek zorunda kaldım.

Ayrıca, Team Build kullanıyorsanız (ve diğer .NET derleme araçlarının aynı olduğundan eminim) sonra derleme adlandırılmış bir yapılandırma ile ilişkilendirebilirsiniz. Bu, örneğin "Üretim" derlemeniz için birim testlerinizi oluşturmazsanız derleme projesi de bu ayarın farkında olabilir ve bu şekilde işaretlendikleri için bunları oluşturamayabilir.

Ayrıca, XCopy'nin yapı makinesinden düşmesini yapardık. Komut dosyası, * .Tests.Dll adlı her şeyin dağıtılmasını kopyalamayı atlar. Çok basitti ama işe yaradı.


1

Onları ayrı tut diyebilirim.

Bahsedilen diğer nedenlerin yanı sıra, kod ve testlerin birlikte yapılması test kapsamı numaralarını çarpıtır. Birim sınama kapsamı hakkında rapor verdiğinizde - raporlanan kapsam daha yüksektir, çünkü birim sınamaları çalıştırdığınızda sınamalar söz konusudur. Entegrasyon testi kapsamı hakkında rapor verdiğinizde, entegrasyon testleri birim testleri yapmayacağından raporlanan kapsam daha düşüktür.


Bu, testleri kapsamak için kullanılan teknolojiye bağlı değil mi? Yani, OpenCover, testin satırları da dahil olmak üzere bir test tarafından çalıştırılırsa kapsanan kod satırlarını dikkate alır, böylece testler beklenmedik istisnalar varsa, bunlar da açık olarak işaretlenir.
Isaac Llopis

0

Flood NN kütüphanesinin birim test çerçevesinden gerçekten ilham alıyorumRobert Lopez'in . Test edilen her bir ünite için farklı bir proje kullanır ve tüm bu projeleri tutan bir çözümün yanı sıra tüm testleri derleyen ve yürüten bir ana projeye sahiptir.

Temiz olan şey aynı zamanda projenin düzeni. Kaynak dosyalar bir klasördedir, ancak VS projesi için klasör aşağıdadır. Bu, farklı derleyiciler için farklı alt klasörler oluşturmanıza olanak tanır. Tüm VS projeleri kodla birlikte gönderilir, bu nedenle birim testlerden herhangi birini veya tümünü çalıştırmak herkes için çok kolaydır.


0

Bunun çok eski bir soru olduğunu biliyorum, ama deneyimimi oraya eklemek istiyorum. Son zamanlarda birim test alışkanlığını ayrı projelerden aynı soruya değiştiriyorum.

Neden?

İlk olarak ana proje klasörü yapısını test projesi ile aynı tutma eğilimindeyim. Yani, altında bir dosya varsaProviders > DataProvider > SqlDataProvider.cs , benim gibi birim test projelerimde aynı yapı oluşturuyorumProviders > DataProvider > SqlDataProvider.Tests.cs

Ancak proje büyüdükçe, dosyaları bir klasörden diğerine veya bir projeden diğerine taşıdıktan sonra, bunları birim test projeleriyle senkronize etmek çok zahmetli bir iş haline geliyor.

İkinci olarak, test edilecek sınıftan ünite test sınıfına gitmek her zaman kolay değildir. JavaScript ve Python için bu daha da zordur.

Son zamanlarda, oluşturduğum her bir dosyanın (örneğin SqlDataProvider.cs) Test soneki ile başka bir dosya oluşturduğumda,SqlDataProvider.Tests.cs

Başlangıçta, dosyaları ve kütüphane referanslarını şişirecek gibi görünüyor, ancak uzun vadede, ilk bakışta hareketli dosya sendromunu ortadan kaldıracaksınız ve ayrıca, test edilmeye aday olan her bir dosyanın bir çift dosyasına sahip olacağından emin olacaksınız. ile .Tests son eki. Ayrı bir projeye bakmak yerine test dosyasına (yan yana olduğu için) kolayca atlamanızı sağlar.

Projeyi taramak ve .Tests dosyası olmayan sınıfı tanımlamak ve bunları sahibine bildirmek için iş kuralları bile yazabilirsiniz. Ayrıca test koşucunuza .Testssınıfları kolayca hedeflemesini de söyleyebilirsiniz .

Özellikle Js ve Python için referanslarınızı farklı yollardan içe aktarmanız gerekmeyecek, sadece test edilen hedef dosya yolunu kullanabilirsiniz.

Bu uygulamayı bir süredir kullanıyorum ve proje boyutu ile sürdürülebilirlik ve projeye yeni gelenler için öğrenme eğrisi arasında çok makul bir denge olduğunu düşünüyorum.


Katılmıyorum. Öğeleri gruplandırmak ve bireysel sınıfları test etmek çok daha organize. Eğer test sağlayıcıları; Bir IProvider, ISqlProvider ve MockSqlConnection'a sahip olursunuz. Bir Sağlayıcı klasöründe, her sağlayıcı için Birim Testi yapılır. Bunu birim testleri üzerinde derinlemesine gidebilirsiniz, ancak daha sonra sadece testler yazıp kod yazmazsınız ve hatta pro'yu kaldırabilir ve test etmek için kod yazmaya başlayabilir.
Nick Turner

0

Diğerlerinin cevapladığı gibi - ayrı projelerde testler yapın

Bahsetilmeyen bir şey, dosyalardan nunit3-console.exebaşka hiçbir şeye karşı çalışamayacağınızdır .dll.

Testlerinizi TeamCity üzerinden yapmayı planlıyorsanız, bu bir sorun yaratacaktır.

Diyelim ki bir konsol uygulama projeniz var. Eğer derlerken, bir çalıştırılabilir döndürür .exeiçin binklasöre.

Gönderen nunit3-console.exebu konsol uygulamasında tanımlanan herhangi testler mümkün olmaz.

Başka bir deyişle, bir konsol uygulaması bir exedosya ve bir sınıf kitaplığı dlldosyaları döndürür .

Bugün bununla biraz aldım ve berbat :(


0

Son zamanlarda docker'da konuşlandırıyorum. Dockerfile / src dizinini kolayca kopyalayıp / test dizininden çıkabildiğinde ayrı bir projeye sahip olmanın değerini görmüyorum. Ama dotnet'te yeniyim ve bir şeyler eksik olabilir.


-2

Ayrı projeleri, aynı svn paylaşmak gerekip gerekmediğini kendimle tartışmak rağmen. Şu anda onlara ayrı svn depoları veriyorum, bunlardan biri

"Projem" - projenin kendisi için

ve biri aradı

"MyProjectTests" - MyProject ile ilişkili testler için.

Bu oldukça temiz ve projeyi taahhüt eden ve testleri taahhüt eden avantajı oldukça ayrı. Ayrıca, testlerinizi serbest bırakmak zorunda kalmadan, gerekirse projenin svn'sini de teslim edebileceğiniz anlamına gelir. Ayrıca, testleriniz ve projeniz için şube / ana hat / etiket dizinlerine sahip olabileceğiniz anlamına gelir.

Ama her bir proje için giderek daha fazla tek bir svn deposunda şuna benzemeye meyilliyim.

Projem
| \ Gövde
| | \ Kod
| \ Testler
| \ Etiketleri
| | \ 0.1
| | | \ Kod
| | \ Testler
| \ 0.2
| | \ Kod
| \ Testler
\ Dallar
  \ MyFork
   | \ Kod
    \Ölçek

Başkalarının bu çözüm hakkında ne düşündüğünü bilmek isterim.


5
Test ve uygulama kodu için ayrı taahhütlere ihtiyacınız olmamalıdır. El ele gitmeli ve taahhütler her ikisini de içerecektir, özellikle de * DD tarzı tasarım kullanıyorsanız.
eddiegroves
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.