unit testing - यूनिट टेस्ट नामकरण सर्वोत्तम प्रथाओं




unit-testing naming-conventions (8)

कक्षा फू के लिए टेस्ट केस का नाम FooTestCase या ऐसा कुछ होना चाहिए (FooIntegrationTestCase या FooAcceptanceTestCase) - क्योंकि यह एक परीक्षण केस है। परीक्षण, परीक्षण मामले, परीक्षण स्थिरता, परीक्षण विधि इत्यादि जैसे कुछ मानक नामकरण सम्मेलनों के लिए http://xunitpatterns.com/ देखें।

इकाई परीक्षण कक्षाओं और परीक्षण विधियों का नामकरण करने के लिए सर्वोत्तम प्रथाएं क्या हैं?

इससे पहले एसओ पर चर्चा की गई थी, यूनिट टेस्ट के लिए कुछ लोकप्रिय नामकरण सम्मेलन क्या हैं?

मुझे नहीं पता कि यह एक बहुत अच्छा दृष्टिकोण है, लेकिन वर्तमान में मेरी परीक्षण परियोजनाओं में, मेरे पास प्रत्येक उत्पादन वर्ग और एक परीक्षण वर्ग, जैसे Product और Product परीक्षण के बीच एक-एक-एक मैपिंग है।

मेरे परीक्षण वर्गों में मेरे पास विधियों के नाम, अंडरस्कोर, और फिर स्थिति और जो होने की उम्मीद है, उसके नाम के साथ विधियां हैं, उदाहरण के लिए Save_ShouldThrowExceptionWithNullName()


देखें: http://googletesting.blogspot.com/2007/02/tott-naming-unit-tests-responsibly.html

परीक्षण विधि नामों के लिए, मैं व्यक्तिगत रूप से वर्बोज़ और स्वयं-दस्तावेज नामों का उपयोग बहुत उपयोगी करता हूं (जावाडोक टिप्पणियों के साथ जो आगे बताता है कि परीक्षण क्या कर रहा है)।


मुझे यह जोड़ना चाहिए कि आपके परीक्षणों को एक ही पैकेज में रखते हुए, लेकिन स्रोत के परीक्षण के समानांतर निर्देशिका में कोड को छोड़ने के लिए तैयार किए जाने के बाद इसे कोड के ब्लोट को हटा दिया जाता है।

मैं व्यक्तिगत रूप से "जुनीट पॉकेट गाइड" में वर्णित सर्वोत्तम प्रथाओं को पसंद करता हूं ... जुनीट के सह-लेखक द्वारा लिखी गई पुस्तक को हरा करना मुश्किल है!


मुझे यह नामकरण शैली पसंद है:

OrdersShouldBeCreated();
OrdersWithNoProductsShouldFail();

और इसी तरह। यह एक गैर-परीक्षक को वास्तव में स्पष्ट करता है कि समस्या क्या है।


मैं दी गई-कब-फिर अवधारणा का उपयोग करता हूं। इस संक्षिप्त लेख पर एक नज़र डालें http://cakebaker.42dh.com/2009/05/28/given-when-then/ । अनुच्छेद बीडीडी के संदर्भ में इस अवधारणा का वर्णन करता है, लेकिन आप इसे किसी भी बदलाव के बिना टीडीडी में भी उपयोग कर सकते हैं।


वीएस + एनयूनीट में मैं आम तौर पर एक साथ कार्यात्मक परीक्षणों को समूहबद्ध करने के लिए अपने प्रोजेक्ट में फ़ोल्डर्स बना देता हूं। फिर मैं यूनिट टेस्ट फ़िक्स्चर क्लासेस बना देता हूं और उन कार्यक्षमताओं के प्रकार के बाद उन्हें नाम देता हूं जिन्हें मैं परीक्षण कर रहा हूं। [टेस्ट] विधियों को Can_add_user_to_domain की तर्ज पर Can_add_user_to_domain :

- MyUnitTestProject   
  + FTPServerTests <- Folder
   + UserManagerTests <- Test Fixture Class
     - Can_add_user_to_domain  <- Test methods
     - Can_delete_user_from_domain
     - Can_reset_password

केंट बेक सुझाव देते हैं:

  • एक 'इकाई' प्रति एक परीक्षण स्थिरता (आपके कार्यक्रम की कक्षा)। टेस्ट फिक्स्चर स्वयं कक्षाएं हैं। परीक्षण स्थिरता नाम होना चाहिए:

    [name of your 'unit']Tests
    
  • टेस्ट केस (टेस्ट फ़िक्स्चर विधियों) के नाम हैं:

    test[feature being tested]
    

उदाहरण के लिए, निम्नलिखित वर्ग रखना:

class Person {
    int calculateAge() { ... }

    // other methods and properties
}

एक परीक्षण स्थिरता होगी:

class PersonTests {

    testAgeCalculationWithNoBirthDate() { ... }

    // or

    testCalculateAge() { ... }
}

परीक्षण के तहत इकाई (यानी कक्षा) के बाद परीक्षण स्थिरता नामकरण करते समय मुझे परीक्षण के लिए " मानक " नामकरण मानक का पालन करना पसंद है।

उदाहरण के लिए (सी # और एनयूनीट का उपयोग करके):

[TestFixture]
public class BankAccountTests
{
  [Test]
  public void Should_Increase_Balance_When_Deposit_Is_Made()
  {
     var bankAccount = new BankAccount();
     bankAccount.Deposit(100);
     Assert.That(bankAccount.Balance, Is.EqualTo(100));
  }
}

क्यों "चाहिए" ?

मुझे लगता है कि यह परीक्षण लेखकों को "कुछ राज्यों में होना चाहिए [[बाद / पहले / कब] [कार्रवाई होती है]" के साथ एक वाक्य के साथ परीक्षण का नाम देने के लिए मजबूर करता है।

हां, लिखना "चाहिए" हर जगह थोड़ा दोहराया जाता है, लेकिन जैसा कि मैंने कहा है कि यह लेखकों को सही तरीके से सोचने के लिए मजबूर करता है (इसलिए नौसिखियों के लिए अच्छा हो सकता है)। इसके अलावा यह आम तौर पर एक पठनीय अंग्रेजी परीक्षण नाम में परिणाम देता है।

अपडेट करें :

मैंने देखा है कि जिमी बोगर्ड भी 'चाहिए' का प्रशंसक है और यहां तक ​​कि एक यूनिट टेस्ट लाइब्रेरी भी है जिसे Should कहा जाता है।

अपडेट करें (4 साल बाद ...)

रुचि रखने वालों के लिए, वर्षों से नामकरण परीक्षणों के लिए मेरा दृष्टिकोण विकसित हुआ है। उपरोक्त वर्णित पैटर्न के साथ मुद्दों में से एक यह है कि एक नज़र में यह जानना आसान नहीं है कि कौन सी विधि परीक्षण में है। ओओपी के लिए मुझे लगता है कि परीक्षण के तहत विधि के साथ परीक्षण नाम शुरू करने के लिए और अधिक समझदारी होती है। एक अच्छी तरह से डिज़ाइन किए गए वर्ग के लिए इसका परिणाम पठनीय परीक्षण विधि नामों में होना चाहिए। अब मैं <method>_Should<expected>_When<condition> समान प्रारूप का उपयोग करता हूं। स्पष्ट रूप से संदर्भ के आधार पर आप कुछ और उचित के लिए कंधे / कब क्रियाओं को प्रतिस्थापित करना चाहते हैं। उदाहरण: Deposit_ShouldIncreaseBalance_WhenGivenPositiveValue()





naming-conventions