RSpec دقیقا چیه و چه کارهایی باهاش میشه کرد؟

rspec

#1

من اسم RSpec رو چند بار توی این انجمن و جا های دیگه شنیدم ، ولی هیچ وقت درک نکردم ، واقعا چه کاری باهاش می کنن. توی ویکی پدیا هم سرچ کردم ، ولی بازهم چیز زیادی نفهمیدم. TDD , DSL DBB !!
انگار RSpec کلا پیچیده تر از حد فهم من :smile:


روند تست نویسی به چه صورت می باشد؟
#2

مبحث بزرگی را اشاره کردید
به صورت خیلی خلاصه توضیح‌ میدم
Rspec فریمورک تست نویسی برای روبی
تست نویسی روش ازمایش اتوماتیک کد هستش که کمک میکنه درستی و نادرستی کدو بدانید

مثال:

    # Implementation
class Greeter
  def self.greet(name)
"Hello #{name}!"
  end
end


# Test
describe Greeter do
  describe ".greet" do
    it "says hello" do
      expect(Greeter.greet("Carlos")).to eq "Hello Carlos!"
    end
  end
end

در مثال عملکرد این متود تست شده و هر وقت این تست اجرا بشه و سبز جواب بده میتونیم اطمینان داشته باشیم که عملکرد این درسته
درکل دو نوع تست داریم unit test تستی که عملکرد یک واحد سیستم و تست میکنه و اگر رد بشه میتونیم دقیقا بگیم کجا مشکل وجود داره، این تستها اصولا سریع هستند
و تستهای تجمعی integration test این تستها عملکرد چند واحد در کنارهم رو تست میکنند مثلا اگر یک دکمه رو بزنید اطلاعات فرم در دیتابیس حفظ میشه این تستها بیشتر. طول میکشند ولی پوشش بیشتری از سیستم میدهند با رد شدن این نوع تست هر قسمتی میتونه نادرست باشه.

TDD ایده ای که تست رو باید اول نوشت بعد کد اصلی
این کار نه تنها برای ازمایش درستی یا نادرستی برنامه هست بلکه برای ساخت نرم افزار بهتر به کار میره
کد با طراحی بد به سختی تست میشه و TDD ازاین جلوگیری میکنه
TDD سه مرحله داره
Red نوشتن تست و دیدن رد شدن تست
Green نوشتن کد اصلی که تست و قبول میکنه و تست سبز میشه
Refactor بهبودکد که همچنان باید تست سبز باشه

تست کردن درتمام شرکتهای بزرگ دنیا به کار میره چون تغییر و بهبود کد و امکان پذیر میکنه اگر تست نباشه هیچ اطمینان نیست که کد جدید. عملکرد قبلی انجام میده یا نه


روند تست نویسی به چه صورت می باشد؟
#3

بهتر نيست بگيم RSpec يك فريمورك براى تست كردن به روش bdd هست يا در اصل يك فريمورك توسعه رفتار محور است؟ به جاى تست نويسى؟
بنظر من Red/Green/Refactor يك روش توصيه شده براى TDD هست و ميتونه رعايت نشه، نظر شما چيه؟

در مورد نوشتن برنامه بهتر با شما موافقم، TDD ميتونه دوتا معنى داشته باشه Test Driven Development يا همون “توسعه آزمون محور” يا Test Driven Design يا “طراحى آزمون محور”. كه دومى به اين معنى هست كه نرمافزار جورى طراحى بشه كه مرحله به مرحله قابل تست باشه و برنامه بر مبناى تست پذير بودن بنا بشه


#4

بله شخصا برای من BDD یک روش تست نویسیه که به ابزار مربوط نیست با mintest مثلا میشه تستی نوشت که قوانین BDD و بهتر از بعضی Rspec تست ها نوشته شده
ولی شما درست میفرمایید Rspec خودشو framework BDD معرفی میکنه


#5

منظور من خود فريمورك RSpec بود، مثل اينه كه بگيم ريلز يك فريمورك برنامه نويسيه، خب هست! اما مفهوم رو نميرسونه، حتى اگر از نظر ما وب دولپمنت همون برنامه نويسى باشه.
البته خيلى هم اين مورد مهم نيست، اصل مطلب رو فرمودين شما


#6

شما هم خیلی سخت میگیری RSpec يك فريمورك براى تست كردنه یا تست نویسی . منظور اشکاره


#7

يكمى سختگير هستم :joy:اما بعضى وقتا جزييات تاثير زيادى روى كل دارن. تست نويسى :thinking::thinking::thinking: نه منو راضى نميكنه :hugs:
دچار وسواس شدم


#8

اگر Red-Green-Refactor دنبال نشه به نظر من TDD دیگه نیست و تست اتوماتیک کردن که اشکالی نداره
اما از مزایای Test Driven Design که فرمودین نمیشه بهره به اون صورت گرفت


#9

من از طرفداران red/green/refactor هستم، اما منظورم اين بود كه اين هم يك متد هست و گاهى دنبال نميشه، مثلا دیدم که بعضی ها مرحله refactor و وقتی سبز شدن دیگه جا میندازند، خب بازم tdd هست اما دیگه red/green/refactor نیست