Dart Programlama - Birim Testi
Birim Testi, bir uygulamanın her bir biriminin test edilmesini içerir. Geliştiricinin, tüm karmaşık uygulamayı çalıştırmadan küçük işlevleri test etmesine yardımcı olur.
Dart external library "test" adı verilen birim testleri yazmak ve çalıştırmak için standart bir yol sağlar.
Dart birimi testi aşağıdaki adımları içerir -
Step 1: Installing the "test" package
Mevcut projede üçüncü taraf paketleri kurmak için, pubspec.yamldosya. Yüklemektest packagesönce aşağıdaki girişi yapın pubspec.yaml dosya -
dependencies:
test:
Girişi yaptıktan sonra, sağ tıklayın pubspec.yamldosya ve bağımlılıkları alın. Yükleyecek"test"paketi. Aşağıda verilen aynı ekran görüntüsüdür.WebStorm Editör.
Paketler şuradan yüklenebilir: command lineçok. Aşağıdakileri terminale yazın -
pub get
Step 2: Importing the "test" package
import "package:test/test.dart";
Step 3 Writing Tests
Testler, üst düzey işlev kullanılarak belirtilir test(), süre test assertions kullanılarak yapılır expect()işlevi. Bu yöntemleri kullanmak için, birpub bağımlılık.
Sözdizimi
test("Description of the test ", () {
expect(actualValue , matchingValue)
});
group()işlevi testleri gruplamak için kullanılabilir. Her grubun açıklaması, test açıklamalarının başına eklenir.
Sözdizimi
group("some_Group_Name", () {
test("test_name_1", () {
expect(actual, equals(exptected));
});
test("test_name_2", () {
expect(actual, equals(expected));
});
})
Örnek 1: Başarılı Bir Test
Aşağıdaki örnek bir yöntemi tanımlar Add(). Bu yöntem iki tamsayı değeri alır ve şunu temsil eden bir tamsayı döndürürsum. Bunu test etmek içinadd() yöntem -
Step 1 - İçe aktar test aşağıda verilen paket.
Step 2 - testi kullanarak tanımlayın test()işlevi. Buradatest() işlevi kullanır expect() bir iddiayı güçlendirmek için işlev.
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);
});
}
Aşağıdakileri üretmelidir output -
00:00 +0: test to check add method
00:00 +1: All tests passed!
Örnek 2: Başarısız Bir Test
subtract()aşağıda tanımlanan yöntemin mantıksal bir hatası var. Aşağıdakitest aynı şeyi doğrular.
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
});
}
Output - İşlev için test durumu add() geçer ama için test subtract() aşağıda gösterildiği gibi başarısız olur.
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)
Test Durumlarını Gruplama
Gruplayabilirsiniz test casesböylece test kodunuza daha fazla anlam katar. Eğer çok varsatest cases bu daha temiz kod yazmanıza yardımcı olur.
Verilen kodda, için bir test senaryosu yazıyoruz. split() fonksiyon ve trimişlevi. Bu nedenle, bu test durumlarını mantıksal olarak gruplandırıyoruz ve bunaString.
Misal
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"));
});
});
}
Output - Çıktı, aşağıda verildiği gibi her bir test senaryosu için grup adını ekleyecektir -
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