Şu anda bakımını sürdürmemiz gereken ortamımızda bir Perl betiği var. Komut dosyası boyunca global değişkenleri kullanmak (ve yeniden kullanmak) dahil olmak üzere kötü uygulamalarla doludur. Senaryoda değişiklik yapmaya başlamadan önce, bazı test senaryoları yazmaya çalışacağım, böylece iyi bir regresyon tabanına sahip olacağım. Bunu yapmak için, bu page'da açıklanan bir yöntemi kullanacaktım.Bağımsız bir Perl komut dosyasını test ederken değişkenleri geçersiz kıl
Tek bir alt yordam için testler yazarak başlıyordum. Ben
require 'script_to_test.pl';
ve bütün senaryoyu yürütmek olmaz yapabilirsiniz
return 1 if (caller());
O yol, benim test komut: Ben test ediyorum script üst kısmına yakın biraz bu hattı koydu.
test etmek gidiyordu ilk altprogram komut boyunca ayarlanır küresel değişkenlerin kullanımı çok kolaylaştırır. Ben beyan nerede testi, üst kısmında büyük bir "my" bloğu vardır değilim, maalesef
require_ok('script_to_test.pl');
$var_from_other_script = 'Override Value';
ok(sub_from_other_script());
(benim için) komut dosyası: My düşünce, benim test komut dosyasındaki böyle bir şey bu değişkenleri geçersiz kılmak için çalışmaktı komut dosyasında kullanılan tüm değişkenler. Bu, test betiğimin, testler üzerinde çalıştığım komut dosyasındaki değişkenleri görmesini/değiştirmesini önler.
Exporter, Test :: Mock ... ve diğer bazı modüller ile oynadım, ancak herhangi bir değişkeni değiştirmek isteyebileceğim gibi görünüyor. moda.
Amacım, diğer komut dosyasını değiştirmemek, ancak diğer komutları değiştirmeye başladığımda bazı iyi testler yapmak için, hiçbir şeyi kırmadığımdan emin olabilirim. Komut dosyası yaklaşık 10.000 satırdır (ana blokta 3.000). Bu yüzden, eğer bir şeyi değiştirmeye başlarsam, kodun diğer bölümlerini etkileyeceğim, bu yüzden iyi bir test paketine sahip olmanız yardımcı olacaktır.
Bu mümkün mü? Arama komut dosyası, "my" ile bildirilen başka bir komut dosyasındaki değişkenleri değiştirebilir mi?
Ve en iyi çözüm olabilir vs. "Sadece sıfırdan senaryoyu yeniden yazmak" gibi cevaplarla atlamak yok ama benim soruya cevap vermez ve lütfen Yeniden yazmak için zamanımız yok. komut (veya komut davranışını değiştirmeden bir fotoğraf eklenebilir varsa) bir package
beyanı varsa
Bu, orijinal komut dosyasında minimum değişikliklerle mükemmel şekilde çalışır. – BrianH