با عرض سلام خدمت کاربران محترم سایت پی وی لرن.
با جلسه ای دیگر از سری جلسات دوره آموزش زبان برنامه نویسی دارت Dart در خدمت شما هستیم.
در این جلسه قصد داریم تا نحوه تست کد ها با استفاده از Unit Test یا تست واحد در زبان دارت را آموزش دهیم.
تست واحد شامل آزمایش واحد های جداگانه یک برنامه است.
تست واحد به برنامه نویسان کمک میکند تا بدون اجرای کل برنامه، قابلیت های و بخش های کوچکتر برنامه را جداگانه تست کنند.
کتابخانه خارجی test در زبان دارت یک روش استاندارد برای ایجاد و اجرای تست واحد فراهم کرده است.
بعد از نصب کتابخانه، آن را به صورت زیر در برنامه های خود وارد کنید:
1 | import "package:test/test.dart"; |
تست ها توسط تابع ()test مشخص میشوند. همچنین بخش راستی آزمایی نیز توسط تابع ()expect انجام میشود.
گرامر:
1 2 3 | test("Description of the test ", () { expect(actualValue , matchingValue) }); |
برای تست گروهی کد ها میتوانید از تابع ()group استفاده کنید.
گرامر:
1 2 3 4 5 6 7 8 | group("some_Group_Name", () { test("test_name_1", () { expect(actual, equals(exptected)); }); test("test_name_2", () { expect(actual, equals(expected)); }); }) |
در مثال زیر تابعی به نام ()Add تعریف کرده ایم. این تابع دو مقدار را دریافت و جمع آن ها را نمایش میدهد.
برای تست این تابع ابتدا پکیج test را در برنامه import کرده و سپس تابع ()test را مینویسیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import 'package:test/test.dart'; // Import the test package int Add(int x,int y) // Function to be tested { return x+y; } void main() { // Define the test test("test to check add method",(){ // Arrange var expected = 30; // Act var actual = Add(10,20); // Asset expect(actual,expected); }); } |
خروجی مثال بالا به شکل زیر خواهد بود:
1 2 | 00:00 +0: test to check add method 00:00 +1: All tests passed! |
خروجی بالا موفقیت آمیز بودن تست را نشان میدهد.
در مثال زیر دو تابع ()Add و ()Sub را تعریف کرده ایم که تابع ()Sub تفریق دو عدد را برمیگرداند.
ما عمدا خروجی این تابع را تغییر داده تا نتیجه اشتباهی را برگرداند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import 'package:test/test.dart'; int Add(int x,int y){ return x+y; } int Sub(int x,int y){ return x-y-1; } void main(){ test('test to check sub',(){ var expected = 10; // Arrange var actual = Sub(30,20); // Act expect(actual,expected); // Assert }); test("test to check add method",(){ var expected = 30; // Arrange var actual = Add(10,20); // Act expect(actual,expected); // Asset }); } |
تست واحد تابع ()Add را قبول میکند اما چون تابع ()Sub نتیجه اشتباه برمیگرداند، تست واحد خروجی زیر را به ما نشان میدهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 00:00 +0: test to check sub 00:00 +0 -1: test to check sub Expected: <10> Actual: <9> package:test expect bin\Test123.dart 18:5 main.<fn> 00:00 +0 -1: test to check add method 00:00 +1 -1: Some tests failed. Unhandled exception: Dummy exception to set exit code. #0 _rootHandleUncaughtError.<anonymous closure> (dart:async/zone.dart:938) #1 _microtaskLoop (dart:async/schedule_microtask.dart:41) #2 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50) #3 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:394) #4 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:414) #5 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148) |
تست گروهی برای مواقعی که تعداد زیادی واحد یا بخش کد را میخواهید تست کنید، مفید خواهد بود.
در مثال زیر توابع ()split و ()trim زبان دارت را به صورت گروهی آزمایش میکنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 | import "package:test/test.dart"; void main() { group("String", () { test("test on split() method of string class", () { var string = "foo,bar,baz"; expect(string.split(","), equals(["foo", "bar", "baz"])); }); test("test on trim() method of string class", () { var string = " foo "; expect(string.trim(), equals("foo")); }); }); } |
خروجی:
1 2 3 | 00:00 +0: String test on split() method of string class 00:00 +1: String test on trim() method of string class 00:00 +2: All tests passed |
جلسه آموزش Unit test یا تست واحد در زبان دارت Dart نیز به پایان رسید.
در جلسه بعد به آموزش HTML DOM در زبان دارت خواهیم پرداخت.