2011-11-23 27 views
5

Microsoft Test ile VS 2010'da birçok birim testi yazıyorum. Her test yöntemi düştüm böyle baktığında bu biraz çirkinDenemekten kaçınmanın en iyi yolu nedir?

[TestMethod] 
public void This_is_a_Test() 
{ 
    try 
    { 
    // do some test here 
    // assert 
    } 
    catch (Exception ex) 
    { 
    // test failed, log error message in my log file and make the test fail 
    } 
    finally 
    { 
    // do some cleanup with different parameters 
    } 
} 

: her test sınıfında aşağıda benzer birçok test yöntemleri var. Ama şimdiye kadar test kodumu daha temiz hale getirmek için iyi bir çözüm bulamadım, özellikle de son blokta bulunan temizlik kodu. Birisi bana bu konuda tavsiyelerde bulunabilir mi?

Şimdiden teşekkürler.

cevap

6

gerçekten [*] aşağıda gösterilen gibi bir yardımcı yönteminde bu standart şablonu sarıp kullanabilirsiniz işlemek ve test yürütme iken istisnalar giriş isterseniz .

Assert.Throws<ExceptionType>(() => { ... code block... }); 
Assert.DoesNotThrow(() => { ... code block... }); 

Ve temizleme special yapmak:

Ama istisnalar eğer

bu yanlış yaklaşım ve NUnit istisnaları sınamak için böyle yardımcıları sağlayan örneğin bir test çerçevesi tarafından sağlanan imkanları kullanması gerektiğini test durumu bir parçasıdır Test başlatma ve otomatik olarak bir test çerçevesi tarafından sınama yapmak için [TestCleanup] ve [TestInitialize] gibi yöntem öznitelikleri.

[*] fikir temsilci test vücudu sarmak ve aslında try/catch bloğu sarılmış test yürütme gerçekleştirmek yardımcı içine geçmektir:

// helper 
public void ExecuteTest(Action test) 
{ 
    try 
    { 
    test.Invoke(); 
    } 
    catch (Exception ex) 
    { 
    // test failed, log error message in my log file and make the test fail 
    } 
    finally 
    { 
    // do some cleanup with different parameters 
    } 
} 

[TestMethod] 
public void This_is_a_Test_1() 
{ 
    Action test =() => 
    { 
     // test case logic 
     // asserts 
    }; 

    this.ExecuteTest(test); 
} 
+0

Cevabınız için teşekkürler, çözümü deneyeceğim. –

1

Temizle tüm denemek-yakala bırak Son olarak (özellikle yakalamak sadece gereksiz değil, hatta zararlı, test yaparken istisnayı yakalamamalısınız) ve gözyaşı temizleme yöntemini (ancak MS Testinde yapıldıysa, [TearDownMethod] veya [TearDownMethod] gibi bir şey olacağını varsayabilirim. FixtureTearDown] ya da bunun gibi bir şey).

+0

En azından temizlik yapmak için engellemeye ihtiyacım var, çünkü en azından her bir test yönteminin temizlenmesi farklı bir şey var. –

+0

Bu durumda, evet. Temizliğe ihtiyacınız varsa. Testler ayrılıkta çalışır. Ve eğer onları ortak kurulum ve ortak temizlik yaptığınız yerde, fikstürlere akıllıca ayırırsanız, bu desene nadiren ihtiyacınız vardır. Sana deneyimlerimden bahsediyorum. Temizlemen gerekenlere bir örnek verebilir misin? (ve umarim ki, istisnaların yakalanmak üzere tasarlanmadıklarını, elle tutulduklarını anlarsınız, ancak onları yakalamak için koşucuyu test etmek ve bir başarısızlık mı yoksa bir hata mı, yoksa "yakalama" parçaları mı olduğunu görmek üzere tasarlanmışlardır. gerçekten birim testinin nasıl olması gerektiğine karşıydı). –

+0

Yakalama bloğunda Hata mesajlarını gözden geçirilmek üzere tanımladığım merkezi bir yere kaydetmek istiyorum. Son olarak blokta dinamik olarak oluşturulan veriyi veritabanında temizlemem gerekiyor. Bazı test yöntemleri için sadece birkaç veri yaygındır. –

İlgili konular