Randomizasyondan derecesine sahip yöntemleri için birim testleri Yazma

4 Cevap php

Ben phpunit kullanıyorum ve benim geleneksel yaklaşım ben test ediyorum yöntemlerle denilen olsun davalarını nesneleri ve yöntemleri kullanmaktır. Mock nesneler birim test girdi olarak ne olacağını söyledim. Sorun davalarını nesneleri verilen giriş kısmı rastgele test edilen yöntemlerle üretiliyor (ve birim test olanların ne bilmenin bir yolu vardır) olmasıdır.

Herkes bir çözüm hatırlatıyoruz Sadece merak.

4 Cevap

"Rastgele parçası" yöntemiyle enjekte (veya rastgele the çekirdek özelliği) olabilir mi?

Örneğin Yerine (belki bir basitleştirilmiş bir örnek "rastgele" kelimenin tam anlamıyla alarak)

function foo($x, $y) {
  return $x * rand(1, $y);
}

gibi bir şey kullanabilirsiniz

function foo($x, $r) {
  return $x * $r->getNext();
}

Eğer gerçekten rastgele değerler döndürür ama örneğin yok $ r için bir nesne geçirebilirsiniz beri sizin, testlerde mümkün olduğunca çok "rasgelelik" ortadan kaldırmak Bu şekilde durumlarda kenar.

Bu özel durumda bilmeden söylemek, ama belki test altındaki nesne içine bazı rasgele sayı sağlayıcı enjekte refactor olabilir zor. Lütfen testi sırasında tekrarlanabilir sonuçlar elde etmek için kodlanmış rasgele sayı tohum kullanabilirsiniz.

Eğer beklenen sonuçların bir harita var, ve anahtar kümesinden rasgele çizerseniz, rastgele bir derecesi var ve hala beklenen sonucu ne tahmin etmek mümkün olabilir.

Sen kendi girdileri konusunda sıkı mocks kullanmak zorunda değilsiniz - sadece yapmak o testlere değer eklediğinde.

Diğer senaryolarda, onların girdi umursamadığını veya bazı yöntemler sıkı ve bazı gevşek olarak gerekli gerekmez taslakları kullanın.