2010-11-10 8 views
12

पर थोड़ा सा है जैसा कि शीर्षक से पता चलता है, क्या यह परीक्षण नाम शीर्ष पर थोड़ा सा है?क्या यह परीक्षण नाम शीर्ष

WhenChargeIsGreaterThanRestingChargeButLessThanChargeRestApproachStep_OnUpdate_ChargeIsSetToRestingCharge 

इसे सुधारने के तरीके पर कोई सुझाव? या यह ठीक है जैसा यह है?

नीचे पूरे परीक्षण स्थिरता के रूप में यह खड़ा है तो आप कुछ संदर्भ :)

public class NeuronTests  
{ 
     [Fact] 
     public void OnUpdate_NeuronFiresWhenChargeIsEqualToThreshold() 
     { 
      Neuron neuron = new Neuron(); 
      bool fired = false; 
      neuron.Fired += (s, e) => fired = true; 
      neuron.Charge = Neuron.ChargeThreshold; 

      neuron.Update(); 

      Assert.True(fired, "Neuron didn't fire"); 
     } 

     [Fact] 
     public void OnUpdate_NeuronDoesntFireWhenChargeIsLessThanThreshold() 
     { 
      Neuron neuron = new Neuron(); 
      bool fired = false; 
      neuron.Fired += (s, e) => fired = true; 

      neuron.Charge = Neuron.ChargeThreshold - 1f; 
      neuron.Update(); 

      Assert.False(fired, "Neuron fired!"); 
     } 

     [Fact] 
     public void OnUpdate_NeuronFiresWhenChargeIsGreaterThanThreshold() 
     { 
      Neuron neuron = new Neuron(); 
      bool fired = false; 
      neuron.Fired += (s, e) => fired = true; 
      neuron.Charge = Neuron.ChargeThreshold + 1f; 

      neuron.Update(); 

      Assert.True(fired, "Neuron didn't fire"); 
     } 

     [Fact] 
     public void WhenNeuronFires_ChargeResetsToRestingCharge() 
     { 
      Neuron neuron = new Neuron(); 
      neuron.Charge = Neuron.ChargeThreshold; 

      neuron.Update(); 

      Assert.Equal(Neuron.RestingCharge, neuron.Charge); 
     } 

     [Fact] 
     public void AfterFiring_OnUpdate_NeuronWontFire() 
     { 
      Neuron neuron = new Neuron(); 
      int fireCount = 0; 
      neuron.Fired += (s, e) => fireCount++; 

      neuron.Charge = Neuron.ChargeThreshold; 
      neuron.Update(); 
      neuron.Charge = Neuron.ChargeThreshold; 
      neuron.Update(); 

      Assert.Equal(1, fireCount); 
     } 

     [Fact] 
     public void WhenResting_OnUpdate_NeuronWillFire() 
     { 
      Neuron neuron = new Neuron(); 
      int fireCount = 0; 
      neuron.Fired += (s, e) => fireCount++; 

      neuron.Charge = Neuron.ChargeThreshold; 
      neuron.Update(); 
      neuron.Charge = Neuron.ChargeThreshold; 
      neuron.Update(); 
      neuron.Charge = Neuron.ChargeThreshold; 
      neuron.Update(); 

      Assert.Equal(2, fireCount); 
     } 

     [Fact] 
     public void WhenChargeIsGreaterThanRestingCharge_OnUpdate_ChargeDecreasesTowardsRestingCharge() 
     { 
      Neuron neuron = new Neuron(); 

      neuron.Charge = Neuron.RestingCharge + (2 * Neuron.ChargeRestApproachStep); 

      neuron.Update(); 

      Assert.Equal(Neuron.RestingCharge + Neuron.ChargeRestApproachStep, neuron.Charge); 
     } 

     [Fact] 
     public void WhenChargeIsGreaterThanRestingChargeButLessThanChargeRestApproachStep_OnUpdate_ChargeIsSetToRestingCharge() 
     { 
      Neuron neuron = new Neuron(); 

      neuron.Charge = Neuron.RestingCharge + (Neuron.ChargeRestApproachStep * 0.5f); 

      neuron.Update(); 

      Assert.Equal(Neuron.RestingCharge, neuron.Charge); 
     } 


    } 
+8

यह एक नाम मैं ऊपर आ जाएगा की तरह दिखता है साथ में। टेस्ट केस के लिए यह एक अद्भुत नाम है!यह बिना किसी टिप्पणी के क्रिस्टल स्पष्ट है, और आपको इसे देखकर पहले रखरखाव प्रोग्रामर की प्रतिक्रिया की कल्पना करने और एक "क्या ???" सोचने की कल्पना की गई है। यदि आप पठनीयता या प्रदर्शन को प्रभावित किए बिना हास्य को अपने कोड में इंजेक्ट कर सकते हैं, तो उतना ही बेहतर होगा। – David

+1

स्पष्ट, संक्षिप्त, स्वयं दस्तावेज ... कोई और क्या चाहता है? –

+0

कुछ दिन उपयोगी हो सकता है जब आपको एक परीक्षण धावक मिला जो नाम निष्पादित कर सकता है। –

उत्तर

15

मेरा व्यक्तिगत राय है कि विधि के नाम कभी नहीं बहुत लंबा हो सकता है, जब तक कि वे वर्णनात्मक हैं मिल सकता है।

यूनिट परीक्षण नाम बहुत अधिक होते हैं, क्योंकि उन्हें अधिक जानकारी होती है। यह मेरे लिए भी ठीक है, क्योंकि वे केवल विधि हस्ताक्षर में और परीक्षणों की आपकी सूची में दिखाई देते हैं (और यह वह जगह है जहां आप एक अच्छा नाम रखना चाहते हैं), आप उन्हें किसी अन्य कोड से कभी भी कॉल नहीं करेंगे।

20

इन जैसे लेआउट परीक्षणों का एक लोकप्रिय तरीका सामान्य बीडीडी प्रथाओं द्वारा सुझाए गए अनुसार दिए गए/कब/फिर टाइप शब्दावली के साथ घोंसला वाले वर्गों का उपयोग करना है।

public class NeuronStory 
{ 
    public class GivenChargeIsGreaterThanRestingCharge 
    { 
     public class GivenChargeIsLessThanChargeRestApproachStep 
     { 
      public class WhenUpdated 
      { 
       public void ThenChargeIsSetToRestingCharge() 
       { 
       } 
      } 
     } 
    } 
} 

इस तरह आप भी कर सकते हैं घोंसला अन्य परीक्षण जो भी एक ही स्थान पर GivenChargeIsGreaterThanRestingCharge कहानी में फिट।

+0

अपने परीक्षणों को पूरा करने का शानदार तरीका। –

+0

यह निश्चित रूप से परीक्षणों को डालने का एक दिलचस्प तरीका है। हालांकि यह मेरे सौंदर्य स्वाद के लिए थोड़ा घोंसला है। – Sekhat

+1

यह नाम का प्रतिनिधित्व करने का एक बेहतर तरीका है, जबकि दूसरा अच्छी शुरुआत थी। – none

1

यह थोड़ा लंबा है, रखरखाव कार्य को पढ़ने के लिए एक त्वरित विचार प्राप्त करने के लिए फ़ंक्शन को पढ़ना चाहता है, जो लंबे समय से कार्य को पढ़ने में तेज़ी से बनाता है।

यह परीक्षणों पर भी लागू होता है। जब मैं एक समारोह शीर्षक के रूप में एक निबंध लिखने की जरूरत महसूस, मैं निकाल देते हैं '' जब 'है' और बार-बार शब्द ... छोड़ने:

ChargeGreaterThanRestingButLessThanRestApproachStep_OnUpdate_ChargeSetToResting

नहीं बहुत कम वर्णनात्मक, और अधिक आसानी से पढ़ने योग्य। ..

के रूप में विंडोज फोन 7 विज्ञापन का कहना है कि 'अधिक झलक और गो'

3

अंडरस्कोर आप क्या सोचते हैं विधि नाम से बाहर ले जाया जाना चाहिए करने के लिए सुराग दे।

  • कक्षा के नाम पर परीक्षण के तहत क्या चलें।
  • जोर दें कि परीक्षा परिणाम क्या होगा कथन कथन (यदि आवश्यक हो तो टिप्पणी करें)। क्यूं कर? यदि परीक्षण में दावा कभी भी बदलता है, तो परीक्षण का नाम बदलना चाहिए?

तो फिर तुम हो सकता है:

public class NeuronOnUpdateTests 
{ 
    public void WhenChargeIsBetweenRestingChargeAndChargeRestApproachStep 
    { 
    //Charge is set to resting state 
    Assert.True(x); 
    } 
} 
+0

पुराने प्रश्नों की समीक्षा करने के लिए वापस आ रहा है। मैंने यह देखा और मुझे यह पसंद है। मैंने अवचेतन रूप से अंडरस्कोर के साथ उन्हें समूहीकृत किया था। खुशी है किसी ने इसे देखा :) – Sekhat

1

एक अलग रूप में, एक ही रास्ता (निश्चित रूप से नहीं एक ही रास्ता) के रूप में की परीक्षण नामकरण एक अभिकथन के रूप में अपने परीक्षण नाम लिखने के लिए है।

एक सरल (भोली) उदाहरण:

int Add(object a, object b) 
{ 
    return a+b; 
} 

[TestMethod] 
void AddFailsWithNonIntegerArguments() 
{ 
    try 
    { 
     Add("Hello", "World"); 
     Assert::Fail(); 
    } 
    catch 
    { 
     Assert::Pass(); 
    } 
} 

मुख्य प्रश्न मुझे लगता है कि लंबे समय तक परीक्षण फ़ंक्शन नाम ठीक हैं, जब तक कि वे स्पष्ट कर रहे हैं के रूप में पर

संबंधित मुद्दे