Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

तीन-चरण पैटर्न के साथ बेहतर परीक्षण लिखें

(यह अभ्यास रेल से एक छोटा अंश है। पहला अध्याय मुफ्त पाने के लिए यहां साइन अप करें!)

तो, आप एक नए ऐप पर काम कर रहे हैं, और रेल ने अभी आपके लिए एक परीक्षण तैयार किया है:

test/models/bug_test.rb
require 'test_helper'

class BugTest < ActiveSupport::TestCase
  # test "the truth" do
  #   assert true
  # end
end

आप इसे अनसुना करते हैं, एक नाम के साथ आते हैं, और आप अपना परीक्षण लिखने के लिए तैयार हैं, है ना? लेकिन फिर क्या? आप पहले क्या लिखते हैं? आपका परीक्षण कोड कैसा दिखना चाहिए?

यदि आप एक सरल पैटर्न का पालन करते हैं, तो आप कोड की उन ठूंठदार पंक्तियों को स्पष्ट, अच्छी तरह से संरचित परीक्षण मामलों में बदल देंगे।

तीन-चरण परीक्षण पैटर्न

आपके परीक्षण मामलों को तीन चरणों में काम करना चाहिए:

  1. सबसे पहले, आप कुछ सामान सेट करें ("व्यवस्थित करें")
  2. फिर, आप कुछ करते हैं ("अधिनियम")
  3. फिर, आप सुनिश्चित करते हैं कि आप जो होने की उम्मीद कर रहे थे, वह वास्तव में हुआ। ("जोर")

उदाहरण के लिए, कल्पना करें कि आप रूबी में एक सरणी पर एक विधि का परीक्षण कर रहे थे। इस पैटर्न का अनुसरण करते हुए, आपका परीक्षण ऐसा दिखाई दे सकता है:

test "Array#sort will sort an array of numbers" do
  # arrange
  unsorted_array = [7, 4, 2, 3]
  
  # act
  sorted_array = unsorted_array.sort

  # assert
  assert_equal [2, 3, 4, 7], sorted_array
end

काफी सरल। लेकिन परीक्षण के प्रत्येक भाग में एक जगह होती है, और परीक्षण का प्रत्येक चरण आपको लगभग बताता है कि इसे कैसे लिखना है।

कभी-कभी, आपको एक व्यवस्थित चरण की आवश्यकता नहीं होगी, या अधिनियम और मुखर चरण संयुक्त हो जाएंगे। लेकिन जब आप अपने परीक्षण लिखते हैं तब भी यह तीनों चरणों के बारे में सोचने में मदद करता है।

द एसर्ट फेज़ गोचा

Assert चरण के लिए एक तरकीब है:आपको उसी तर्क का उपयोग नहीं करना चाहिए जो Act चरण में Assert चरण में उपयोग किया गया था। आपको हमेशा एक ही उत्तर के लिए दो रास्ते अपनाने चाहिए। अन्यथा, आप जिस कोड को कॉल कर रहे हैं, उसमें आपको बग नहीं दिखाई देंगे, क्योंकि इसे अभी Assert चरण में फिर से कॉल किया जा रहा है।

उदाहरण के लिए, यदि आप कुछ गणित कर रहे हैं:

test "average returns the average of a set of numbers" do
  # arrange
  numbers = [1, 2, 3, 4]
  
  # act
  average = numbers.average

  # assert
  
  # this is bad
  assert_equal [1, 2, 3, 4].average, average

  # this is better
  assert_equal 2.5, average
end

कॉलिंग [1, 2, 3, 4].average फिर से मुखर चरण में खराब है, क्योंकि average लगभग कुछ भी लौटा सकता है और वह दावा अभी भी पारित होगा।

यहाँ, यह बहुत स्पष्ट है। लेकिन जब चीजें अधिक जटिल हो जाती हैं, तब भी सुनिश्चित करें कि आप एक ही कोड को केवल दो बार नहीं चला रहे हैं। अन्यथा आप केवल यह सत्यापित कर रहे हैं कि आपकी विधि को कहा जाता था , ऐसा नहीं है कि इसने आपकी अपेक्षा के अनुरूप काम किया।

आमतौर पर, उत्तर के लिए दूसरा रास्ता अपनाने का सबसे आसान तरीका हाथ से उत्तर ढूंढना और उसे हार्डकोड करना है। यह भंगुर हो सकता है, लेकिन यह आपके परीक्षण से बेहतर है कि आप इसे महसूस किए बिना टूट जाएं।

तीन चरण क्यों?

यदि आप अपने परीक्षणों को उन तीन चरणों में विभाजित करते हैं, तो आपके पास उत्तर देने के लिए सरल प्रश्न हैं। "मुझे यह परीक्षा कैसे लिखनी चाहिए?" के बजाय, आप प्रत्येक चरण पर ध्यान केंद्रित कर सकते हैं:"मुझे यह परीक्षण कैसे सेट अप करना चाहिए?", "मैं क्या परीक्षण कर रहा हूं?", "उत्तर कैसा दिखना चाहिए?"

हो सकता है कि इन सवालों के जवाब अभी भी आसान न हों, लेकिन एक बार में पूरी परीक्षा के बारे में सोचने की तुलना में उत्तर बहुत आसान होंगे। और यदि आप भाग्यशाली हैं, तो आप संबंधित परीक्षणों के बीच चरणों को साझा भी कर सकते हैं, जिससे आपका अगला परीक्षण लिखने में बहुत कम दर्दनाक हो जाएगा।


  1. फेडोरा 16 बीटा वितरण के साथ लिनक्स बस बेहतर हो गया

    लिनक्स वितरण में तेजी से सुधार हो रहा है, और वे सुधार नवीनतम बीटा रिलीज़ में दिखाई देने लगे हैं। फेडोरा, गनोम 3 को ले जाने वाले प्रमुख वितरणों में से एक, अलग नहीं है और आपके मुंह में पानी लाने के लिए इसमें बहुत सी नई सुविधाएं होनी चाहिए। चूंकि फेडोरा 16 अभी बीटा में है, इसमें अभी भी बहुत सारे बग है

  1. स्विफ्ट 3 के साथ ऐप्स कैसे लिखें

    स्विफ्ट का उपयोग macOS और iOS उपकरणों के लिए ऐप लिखने या बनाने के लिए किया जाता है। ऐप्पल ने स्विफ्ट को डिवाइसों से सबसे तेज़ और सबसे कुशल प्रदर्शन प्राप्त करने के लिए स्पष्ट रूप से डिज़ाइन किया है, और स्विफ्ट 3 अपने पहले से ही प्रभावशाली फीचर सेट पर विस्तार करता है। स्विफ्ट 4 में नया क्या है?

  1. रूबी में डेकोरेटर डिजाइन पैटर्न

    डेकोरेटर डिजाइन पैटर्न क्या है? और आप अपने रूबी प्रोजेक्ट्स में इस पैटर्न का उपयोग कैसे कर सकते हैं? डेकोरेटर डिज़ाइन पैटर्न नई क्षमताओं . जोड़कर किसी ऑब्जेक्ट को बेहतर बनाने में आपकी सहायता करता है इसमें बिना कक्षा बदले। आइए एक उदाहरण देखें! लॉगिंग और प्रदर्शन इस उदाहरण में हम रेस्ट-क्लाइंट जैस