এফ # উন্নয়ন এবং ইউনিট পরীক্ষা?


107

আমি সবেমাত্র F # দিয়ে শুরু করেছি, এটি আমার প্রথম কার্যকরী ভাষা। আমি সি # এর সাথে একচেটিয়াভাবে কাজ করে চলেছি, এবং এফ # কীভাবে আমাকে কোড লিখছেন তা পুনরায় ভাবতে পরিচালিত করে তা উপভোগ করুন। একটি দিক যা আমি খানিকটা বিশৃঙ্খলাযুক্ত মনে করি তা হল কোড লেখার প্রক্রিয়াতে পরিবর্তন। আমি এখন সি # তে কয়েক বছর ধরে টিডিডি ব্যবহার করে আসছি এবং আমি কোথায় আছি তা জানতে ইউনিট পরীক্ষা করার জন্য সত্যই প্রশংসা করি।

এখনও অবধি, এফ # এর সাথে আমার প্রক্রিয়াটি কিছু ফাংশন লিখেছে, তাদের সাথে ইন্টারেক্টিভ কনসোল দিয়ে খেলতে হবে যতক্ষণ না আমি "যুক্তিসঙ্গতভাবে" নিশ্চিত যে তারা কাজ করে, এবং ঝাঁকুনি দিয়ে মিশ্রিত করে। এটি অয়লার প্রকল্পের মতো ছোট আকারের সমস্যাগুলিতে ভাল কাজ করে তবে আমি সেভাবে বড় কিছু তৈরির কথা ভাবতে পারি না।

লোকেরা কীভাবে এফ # প্রোগ্রামের জন্য ইউনিট টেস্টিং এবং একটি টেস্ট স্যুট তৈরি করতে পারে? টিডিডির সমতুল্য কি আছে? যে কোনও পয়েন্টার বা চিন্তা প্রশংসা করা হয়।


1
বিশেষজ্ঞ-fsharp.com/ কোড কোডগুলি / ফর্মস / এফ # দিয়ে NUnit ব্যবহারের একটি সাধারণ উদাহরণ দেখায়।
itowlson


সম্পর্কিত: stackoverflow.com/questions/5667372/... (কোয়েটার অনেক বেশী একটি পাদটীকা / মন্তব্য চেয়ে যেমন এই পৃষ্ঠাতে answerset মধ্যে হয়)
রুবেন Bartelink

এই উত্তরগুলিতে একটি জিনিস অনুপস্থিত হ'ল ফোক, অটো ফিকচারের উপযুক্ত উদাহরণ Aআউটফোক এবং অটো ফিক্সচার xএফ # এর টাইপ অনুমানের সাথে যুক্ত n ট্র্যাফোর্ডড / ব্লগ / পোস্ট / টেস্ট.এএসপিএক্স এবং ট্রেফর্ড. com / blog/ post / fstestlang.aspx দেখুন একজন টেস্টার এবং কোনও দিন আমি এখানে একটি যথাযথ উত্তর লিখব
রুবেন বারটেলিংক

উত্তর:


77

টেস্ট-চালিত বিকাশকারীদের এফ # এর মতো ক্রিয়ামূলক ভাষায় ঘরে বসে ঠিক মনে করা উচিত: ছোট ফাংশন যা নির্বিচারে পুনরাবৃত্তিযোগ্য ফলাফল দেয় তারা ইউনিট পরীক্ষায় নিজেকে পুরোপুরি ধার দেয়। এফ # ভাষায় এমন ক্ষমতাও রয়েছে যা লেখার পরীক্ষাগুলি সহজ করে। উদাহরণস্বরূপ, অবজেক্ট এক্সপ্রেশন । আপনি খুব সহজেই ফাংশনগুলির জন্য ফেক লিখতে পারেন যা তাদের ইনপুটটিকে একটি ইন্টারফেস টাইপ হিসাবে গ্রহণ করে।

যদি কিছু হয় তবে এফ # একটি প্রথম শ্রেণির অবজেক্ট-ভিত্তিক ভাষা এবং আপনি সি # তে টিডিডি করার সময় আপনি একই সরঞ্জাম এবং কৌশলগুলি ব্যবহার করতে পারেন। এফ # এর জন্য বা বিশেষত লিখিত কিছু পরীক্ষার সরঞ্জামও রয়েছে:

ম্যাথিউ পোডওয়িস্কি কার্যকরী ভাষায় ইউনিট পরীক্ষার বিষয়ে একটি দুর্দান্ত সিরিজ লিখেছিলেন । চাচা ববও এখানে একটি চিন্তা-চেতনা প্রবন্ধ লিখেছিলেন ।


9
আমি একটি এফ # নির্দিষ্ট ইউনিট পরীক্ষার লাইব্রেরিও তৈরি করেছি (এবং সক্রিয়ভাবে বিকাশ করছি) যাকে আনকোট : কোড . google.com/p/unquote বলা হয় । এটি আপনাকে এফ # কোটেশন ব্যবহার করে স্ট্যাটিকালি পরীক্ষিত F # বুলিয়ান এক্সপ্রেশন হিসাবে টেস্ট assertions লিখতে দেয় এবং স্বয়ংক্রিয়ভাবে দুর্দান্ত পরীক্ষার ব্যর্থতা বার্তা উত্পন্ন করে। এটি xUnit.net এবং NUnit উভয়ের জন্য বিশেষ সহায়তার সাথে কনফিগারেশন-মুক্ত কাজ করে এবং সাধারণত কোনও ব্যতিক্রম ভিত্তিক ইউনিট পরীক্ষামূলক কাঠামো সমর্থন করে। এমনকি এটি এফএসআই সেশনের মধ্যেও কাজ করে যা ইন্টারেক্টিভ টেস্টিং থেকে আনুষ্ঠানিক পরীক্ষার স্যুটগুলিতে নির্বিঘ্নে স্থানান্তর করতে দেয়।
স্টিফেন সোয়েনসেন

পেক্সও আছে , যদিও এটি আঁকানো কিছুটা বেশি কঠিন difficult
বেঞ্জল

1
আঙ্কেল বব লিংক মৃত বলে মনে হয়
Aage

22

আমি নুনিট ব্যবহার করি এবং এটি পড়তে আমার পক্ষে কঠোর বা লেখার পক্ষে কঠোর হয় না:

open NUnit.Framework

[<TestFixture>]
type myFixture() = class

    [<Test>]
    member self.myTest() =
       //test code

end

যেহেতু আমার কোডটি F # এবং অন্যান্য। নেট ভাষার মিশ্রণ, তাই আমি পছন্দ করি যে আমি ইউনিট পরীক্ষাগুলি মূলত একই ফ্যাশনে এবং F # এবং C # উভয় ক্ষেত্রে অনুরূপ বাক্য গঠন সহ লিখি।


4
এখানে অন্যান্য প্রতিক্রিয়াগুলি পড়ার পরে, আমি এফএসইউনিকেট চেষ্টা করেছিলাম এবং আমি মনে করি এটি দুর্দান্ত। এটি টেস্টড্রিভন.নেট (এনউইনিতের মতো) এর সাথেও ভাল কাজ করে, স্ব-ডকুমেন্টিং পরীক্ষা লেখার জন্য একটি তরল স্টাইলকে উত্সাহ দেয় এবং রায় যেমন বলেছিলেন, "এফ # ভাষায় বাড়িতে আরও"। 21 লাইনের কোডের জন্য খারাপ নয় (এবং কয়েকটি লেআউট / নামকরণের সুপারিশ)। দুটি দ্রুত নোট: 1. প্রাকম্পম্পাইল্ড এফএসইউনিত ডিএলএল আমার পক্ষে কাজ করে নি। উত্স থেকে বিল্ডিং (FsUnit.NUnit-0.9.0.fs) সমস্যার সমাধান করেছে। ২. টেস্টড্রাইভন. নেট টেক্সট ফিকচারের নামগুলি দেখতে দেয় না `like this`। ডাবল-টিক ফর্ম ব্যবহার করে পরীক্ষার নামগুলি স্বীকৃত।
ডেভিড গ্লাউবমান

15

কটাক্ষপাত আছে FsCheck , এফ # জন্য একটি স্বয়ংক্রিয় পরীক্ষা করা টুল, মূলত Haskell, এর QuickCheck একটি পোর্ট। এটি আপনাকে কার্যকারিতা বা পদ্ধতিগুলির দ্বারা সন্তুষ্ট হওয়া উচিত এমন বৈশিষ্ট্যগুলির আকারে এবং এফএসচেক পরীক্ষাগুলি যে সংখ্যার এলোমেলোভাবে উত্পন্ন কেসগুলিতে সংখ্যক ধারণ করে তা প্রোগ্রামের একটি স্পেসিফিকেশন সরবরাহ করতে দেয় allows

FsCheck কোডপ্লেক্স পৃষ্ঠা

FsCheck লেখক পৃষ্ঠা


হ্যাঁ, আমার মনে হয় FsCheck প্রথাগত ইউনিট টেস্টিং ফ্রেমওয়ার্ক যেমন NUnit ইত্যাদির চেয়ে অনেক বেশি অফার করে
রবার্ট

11

ডিজলেউবামনের পরামর্শ অনুসারে আপনি NUnit ব্যবহার করতে পারেন। xUnit.net এছাড়াও এর জন্য সমর্থন সরবরাহ করে এবং টেস্টড্রাইভন.নেটের সাথে ভাল কাজ করে । কোডটি NUnit পরীক্ষাগুলির মতো দেখতে পাওয়া যায় তবে একটি পরীক্ষামূলক একটি ধরণে মোড়ানোর প্রয়োজন ছাড়াই।

#light

// Supply a module name here not a combination of module and namespace, otherwise
// F# cannot resolve individual tests nfrom the UI.
module NBody.DomainModel.FSharp.Tests

open System
open Xunit

open Internal

[<Fact>]
let CreateOctantBoundaryReordersMinMax() =
    let Max = VectorFloat(1.0, 1.0, 1.0)
    let Min = VectorFloat(-1.0, -1.0, -1.0)

    let result = OctantBoundary.create Min Max

    Assert.Equal(Min, result.Min)     
    Assert.Equal(Max, result.Max) 

১.৯.১.২০১৮ খ্রিস্টের নতুন ওভারলোডগুলি আমার এফ # এর সাথে বিপর্যয় সৃষ্টি করছে বলে মনে হচ্ছে।
রিক মিনারিচ

@ রিকমিনারিচ আমি আমার কোডে একই ঘটনা ঘটেছে তা অনুভব করেছি। আমি স্রেফ স্পষ্ট ধরণের টীকাগুলি যুক্ত করে শেষ করেছি যাতে সঠিক ওভারলোডটি চয়ন করা যায়। যাইহোক, এটি দুর্ভাগ্যক্রমে আপনার কোডে আরও শব্দ যোগ করে
এরিক শিয়েরবুম

11

আমি মনে করি এটি একটি খুব আকর্ষণীয় প্রশ্ন যা আমি নিজেই অনেক কিছু নিয়ে ভাবছিলাম। এখন পর্যন্ত আমার চিন্তাভাবনাগুলি কেবলমাত্র চিন্তাভাবনা, তাই সেগুলি তাদের জন্য নিন।

আমি মনে করি যে একটি স্বয়ংক্রিয় পরীক্ষার স্যুটের সুরক্ষা জাল ছেড়ে দেওয়া খুব বেশি মূল্যবান একটি সম্পদ, তবে ইন্টারেক্টিভ কনসোলটি লোভনীয় হতে পারে, তাই আমি সর্বদা করেছি বলে ইউনিট পরীক্ষাগুলি লেখা চালিয়ে যাওয়ার পরিকল্পনা করি।

.NET এর অন্যতম প্রধান শক্তি হ'ল ক্রস-ভাষা ক্ষমতা capabilities আমি জানি আমি শীঘ্রই এফ # প্রোডাকশন কোডটি লিখতে চলেছি, তবে আমার পরিকল্পনাটি আমার জন্য নতুন ভাষায় কী রয়েছে তা সহজ করার জন্য সি # তে ইউনিট পরীক্ষা লিখতে হবে। এই পদ্ধতিতে, আমি আরও পরীক্ষা করে দেখতে পারি যে আমি এফ # তে যা লিখি তা সি # (এবং অন্যান্য নেট নেট ভাষা) এর সাথে সামঞ্জস্যপূর্ণ হবে।

এই পদ্ধতির সাথে, আমি বুঝতে পারি যে এফ # এর কয়েকটি বৈশিষ্ট্য রয়েছে যা আমি কেবল আমার এফ # কোডে অভ্যন্তরীণভাবে ব্যবহার করতে পারি, তবে আমার পাবলিক এপিআইয়ের অংশ হিসাবে প্রকাশ করতে পারি না, তবে আমি সেটিকে গ্রহণ করব, ঠিক তেমনই আমি গ্রহণ করি যে এখানে কিছু জিনিস রয়েছে সি # আমাকে uintসিএলএস অনুগত নয় এমন মত প্রকাশ করতে (যেমন ) অনুমতি দেয় এবং তাই আমি সেগুলি ব্যবহার করা থেকে বিরত থাকি।


2
আপনার পরিকল্পনা কেমন চলছে? সি # কোড দিয়ে চ # কোড পরীক্ষা করা সহজ ছিল? আমি f # শিখতে শুরু করেছি এবং আমার পরিকল্পনাটি হল আমার প্রকল্পের কিছু অংশ f # তে লিখতে হবে এবং আমার একই ধারণা রয়েছে: চ # এর জন্য সি # তে ইউনিট পরীক্ষা লিখতেও।
পিটার পোর্টি

@ কোন আপডেট? এফ # দিয়ে টিডিডি ব্যবহার করে প্রবাহে আসতে আমারও বেশ কষ্ট হচ্ছে।
স্কট নিমরড

1
@ স্কটনিমরোড বেশ কয়েকটি আপডেট: আমার বহুবচনীয় কোর্সের চারটি পরীক্ষার বিষয়ে বা এফ # দিয়ে টিডিডি সম্পর্কে। আপনি আমার ল্যানার্ড প্রোফাইলে কনফারেন্সের আলোচনার অনেকগুলি নিখরচায় রেকর্ডিংও পাবেন । অবশেষে, আমার ব্লগ আছে
সিমমানকে

3
@ স্কটনিমরোড আমি যথেষ্ট সময় মতো মার্কের পিএস কোর্সের সম্পূর্ণ সেটটি দেখার জন্য সময় দেওয়ার এবং / বা অর্থ প্রদানের প্রস্তাব দিতে পারি না - এটি সর্বোচ্চ দক্ষতার সাথে আপনার মাথায় এগুলি একসাথে স্ন্যাপ করে দেবে। যদিও এটি আপনার নির্দিষ্ট প্রয়োজনগুলির সাথে প্রযোজ্য বা প্রযোজ্য নয়, "F # ইন ফাংশনাল আর্কিটেকচার" অনেকগুলি বিন্দুও সংযুক্ত করে এবং দৃ strongly়ভাবে বিবেচনা করা উচিত।
রুবেন বারটেলিংক

7

আপনি এফএসইউনিতের উপর নজর রাখতে পারেন - যদিও আমি এটি এখনও ব্যবহার করি নি, এটি চেষ্টা করার মতো হতে পারে। উদাহরণস্বরূপ (নেটিভ) এফ # তে নুনিট ব্যবহার করার চেয়ে অবশ্যই ভাল।


1
ShdNx, কেন আপনি ইউনাইটের বিরুদ্ধে সুপারিশ করবেন? ডন সিমের এফ # বইটি পরীক্ষার জন্য ননিতকে দেখায় এবং এটি সি # তে নুনিট ব্যবহার করার মতো দেখতে বেশ অনুরূপ। এফএসউনিট ডিএসএল দেখতে দুর্দান্ত লাগছে, তবে ইতিমধ্যে নুনিতের সাথে পরিচিত ব্যক্তিদের জন্য (ম্যাথিয়াস "বছরের পর বছর ধরে টিডিডি ব্যবহার করে আসছে") আপনার অভিজ্ঞতা কি এফ # দিয়ে নুনিট ব্যবহার করা সি # বা ভিবি এর চেয়ে বেশি সমস্যাযুক্ত?
itowlson

আমি দ্বিতীয় আইটলসন মন্তব্য, এবং প্রশ্ন। খুব অবশ্যই এফ # তে নুনিট দেখতে বেশ অদ্ভুত লাগছে, তবুও আপনি কি নির্দিষ্ট কিছু বিষয় সম্পর্কে অবগত আছেন যা অন্য কিছু ব্যবহার করার জন্য এটি একটি ভাল ধারণা?
ম্যাথিয়াস

1
আমি বলব যে "বেশ অদ্ভুত দেখাচ্ছে" এটি সাধারণত আরও ভাল কিছু আবিষ্কার করার বাধ্যতামূলক কারণ। অদ্ভুত সন্ধান করা মানে পড়ার পক্ষে কঠোর এবং পড়ার পক্ষে বোঝা বাগগুলি। (আমি ধরে নিচ্ছি যে "অদ্ভুত দেখাচ্ছে" "নতুন এবং / বা অপরিচিত দেখা" এর চেয়ে সম্পূর্ণ আলাদা - অপরিচিত পরিচিত হবে, অদ্ভুত থাকবে বিজোড় থাকবে))
জেমস মুর

1
সত্যি কথা বলতে (যেমন আমি আমার প্রতিক্রিয়াতে উল্লেখ করেছি), আমি এখনও এফএসউনিট ব্যবহার করি নি, তবে আমি পড়েছি যে এফ # তে নুনিট ব্যবহার করা অত্যন্ত বেদনাদায়ক। দুঃখিত যদি এটি না হয়।
ShdNx

4
স্পষ্টতই, আপনি যদি FsUnit ব্যবহার করেন তবে আপনার কাছে টেস্ট ফিক্সচার এবং টেস্ট সদস্য থাকবে। আপনার যা নেই তা হ'ল স্ট্যান্ডার্ড Assert.X কল। FsUnit কেবল আপনাকে NUnit এর এই অংশের চারপাশে একটি মোড়ক দেয় যা এফ # ভাষায় ঘরে ঘরে আরও বেশি করে তোলে।
রে ভার্নাগাস

1

পার্টিতে কিছুটা দেরি হওয়া সত্ত্বেও, আমি ম্যাথিয়াসকে এফ # তে স্বাগত জানাতে চাই (কখনও না এর চেয়ে ভাল দেরী;)) এবং আপনি যাতে এক্সপেক্টো পছন্দ করতে পারেন তেমন চিমে

এক্সপেক্টোর কয়েকটি বৈশিষ্ট্য রয়েছে যা আপনি পছন্দ করতে পারেন:

  • এফ # সিনট্যাক্স জুড়ে, মান হিসাবে পরীক্ষা করে; পরীক্ষা উত্পন্ন করতে সাধারণ এফ # লিখুন
  • অন্তর্নির্মিত প্রত্যাশা মডিউল বা দৃser়তার জন্য আনকোটের মতো একটি বাহ্যিক lib ব্যবহার করুন
  • ডিফল্ট হিসাবে সমান্তরাল পরীক্ষা
  • আপনার হোপাক কোড বা আপনার অ্যাসিঙ্ক কোডটি পরীক্ষা করুন; এক্সপেক্টো জুড়ে অ্যাসিঙ্ক
  • লোগারি ফেকডের মাধ্যমে প্লাগেবল লগিং এবং মেট্রিক্স; বিল্ড সিস্টেমের জন্য সহজেই অ্যাডাপ্টারগুলি লিখুন বা আপনার পরীক্ষাগুলির সম্পাদনের সময়গুলির জন্য একটি ইনফ্লুএক্সডিবি + গ্রাফানা ড্যাশবোর্ড তৈরির জন্য সময় প্রক্রিয়াটি ব্যবহার করুন
  • বেঞ্চমার্কডটনেটের সমর্থনে নির্মিত
  • FsCheck জন্য সমর্থন তৈরি করুন; উত্পন্ন / এলোমেলো ডেটা দিয়ে পরীক্ষা তৈরি করা বা আপনার অবজেক্টের / অভিনেতার রাজ্য স্পেসের আক্রমণকারী-মডেলগুলি তৈরি করা সহজ করে তোলে

-

open Expecto

let tests =
  test "A simple test" {
    let subject = "Hello World"
    Expect.equal subject "Hello World" "The strings should equal"
  }

[<EntryPoint>]
let main args =
  runTestsWithArgs defaultConfig args tests

https://github.com/haf/expecto/

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.