Kelas pembantu statik
IntelliTest menyediakan sekumpulan kelas pembantu statik yang dapat digunakan saat membuat pengujian unit berparameter:
- PexAssume: digunakan untuk menentukan asumsi pada input, dan berguna untuk memfilter input yang tidak diinginkan
- PexAssert: kelas pernyataan sederhana untuk digunakan jika kerangka pengujian Anda tidak menyediakannya
- PexChoose: aliran input pengujian tambahan yang dikelola IntelliTest
- PexObserve: mencatat nilai konkret dan, secara opsional, memvalidasinya dalam kode yang dihasilkan
Beberapa kelas memungkinkan Anda untuk berinteraksi dengan mesin penalaran IntelliTest pada tingkat rendah:
- PexSymbolicValue: utilitas untuk memeriksa atau mengubah batasan simbolis pada variabel
PexAssume
Kelas statik yang digunakan untuk menyatakan asumsi, seperti prasyarat, dalam pengujian unit berparameter. Metode kelas ini dapat digunakan untuk memfilter input pengujian yang tidak diinginkan.
Jika kondisi yang diasumsikan tidak berlaku untuk beberapa input pengujian, PexAssumeFailedException akan ditampilkan. Ini akan menyebabkan pengujian diabaikan secara diam-diam.
Contoh
Pengujian parameter berikut tidak akan mempertimbangkan j=0:
public void TestSomething(int i, int j) {
PexAssume.AreNotEqual(j, 0);
int k = i/j;
...
}
Keterangan
Kode di atas hampir setara dengan:
if (j==0)
return;
kecuali bahwa PexAssume yang gagal tidak menghasilkan kasus pengujian. Dalam kasus pernyataan if, IntelliTest menghasilkan kasus pengujian terpisah untuk mencakup cabang then dari pernyataan if.
PexAssume juga berisi kelas bertumpuk khusus untuk asumsi pada string, array, dan koleksi.
PexAssert
Kelas statis yang digunakan untuk mengekspresikan pernyataan, seperti kondisi akhir, dalam pengujian unit berparameter.
Jika kondisi yang dinyatakan tidak berlaku untuk beberapa input pengujian, PexAssertFailedException akan ditampilkan, yang menyebabkan pengujian gagal.
Contoh
Pernyataan berikut menyatakan bahwa nilai absolut suatu bilangan bulat adalah positif:
public void TestSomething(int i) {
int j = Maths.Abs(i);
PexAssert.IsTrue(j >= 0);
...
}
PexChoose
Kelas statik yang menyediakan nilai input tambahan untuk pengujian, yang dapat digunakan untuk mengimplementasikan Mock Berparameter.
Kelas PexChoose tidak membantu dalam menentukan apakah pengujian lulus atau gagal untuk nilai input tertentu. PexChoose hanya menyediakan nilai input, yang juga disebut sebagai pilihan. Masih tergantung pada pengguna untuk membatasi nilai input, dan untuk menulis pernyataan yang menentukan kapan pengujian lulus atau gagal.
Mode operasi
Kelas PexChoose dapat beroperasi dalam dua mode:
Saat IntelliTest melakukan analisis simbolis dari pengujian dan kode yang diuji selama pembuatan input, pemilih mengembalikan nilai arbitrer dan IntelliTest melacak bagaimana setiap nilai digunakan dalam pengujian dan kode yang diuji. IntelliTest akan menghasilkan nilai yang relevan untuk memicu jalur eksekusi yang berbeda dalam pengujian dan kode yang diuji.
Kode yang dihasilkan untuk kasus pengujian tertentu menyiapkan penyedia pilihan dengan cara tertentu, sehingga eksekusi ulang kasus pengujian semacam itu akan membuat pilihan spesifik untuk memicu jalur eksekusi tertentu.
Penggunaan
- Panggilan sederhana PexChoose.Value untuk menghasilkan nilai baru:
public int Foo() {
return PexChoose.Value<int>("foo");
}
PexObserve
Kelas statik untuk mencatat nilai bernama.
Saat IntelliTest menjelajahi kode, PexObserve digunakan untuk merekam nilai yang dihitung menggunakan representasi string yang diformat. Nilai dikaitkan dengan nama unik.
PexObserve.Value<string>("result", result);
Contoh
// product code
public static class MathEx {
public static int Square(int value) { return value * value; }
}
// fixture
[TestClass]
public partial class MathExTests {
[PexMethod]
public int SquareTest(int a) {
int result = MathEx.Square(a);
// storing result
return result;
}
}
PexSymbolicValue
Kelas statis yang digunakan untuk mengabaikan batasan pada parameter, dan untuk mencetak informasi simbolis yang terkait dengan nilai.
Penggunaan
Biasanya, IntelliTest mencoba untuk menutupi semua jalur eksekusi kode selama eksekusi. Namun, terutama ketika menghitung kondisi asumsi dan pernyataan, seharusnya tidak mengeksplorasi semua kemungkinan kasus.
Contoh
Contoh ini menunjukkan penerapan metode PexAssume.Arrays.ElementsAreNotNull. Dalam metode , Anda mengabaikan batasan pada panjang nilai array untuk menghindari IntelliTest mencoba menghasilkan ukuran array yang berbeda. Batasan hanya diabaikan di sini. Jika kode yang diuji berperilaku berbeda untuk panjang array yang berbeda, IntelliTest tidak dapat menghasilkan array berukuran berbeda dari batasan kode yang diuji.
public static void AreElementsNotNull<T>(T[] value)
where T : class
{
PexAssume.NotNull(value);
// the followings prevents the exploration of all array lengths
int len = PexSymbolicValue.Ignore<int>(value.Length);
// building up a boolean value as follows prevents exploration
// of all combinations of non-null (instead, there are just two cases)
bool anyNull = false;
for (int i = 0; i < len; ++i)
anyNull |= value[i] == null;
// was any element null?
if (anyNull)
PexAssume.Fail("some element of array is a null reference");
}
Ada tanggapan?
Posting ide dan permintaan fitur Anda di Komunitas Pengembang.