Fonksiyonu ikili dosya üretmek olduğunu test etmek nasıl?

2 Cevap php

PHP ile birim test öğrenmek için çalışıyordu. Ben sadece PHP birim testinin içine atlamak birisi için çok uzak biraz biliyorum. Her neyse, burada durum:

function doresize(&$mp3file)
{
    global $tmpdir, $mp3info, $ffmpeg;

    if(dirname($mp3file) != $tmpdir )
    {
    	copy($mp3file , $tmpdir . '/' . $mp3file);
    	$mp3file = $tmpdir . '/' . $mp3file;
    }
    $mp3filenew = basename($file, '.swf') . "_new.mp3";

    $command2 = "$mp3info -x \"$mp3file\" 2> /dev/null";

    exec($command2, $buffer);

    $mp3length = getLengthFromBuffer($buffer);

    debug("  \$mp3length: $mp3length");

    $lengthTranslated = roundLengthToSeconds($mp3length);

    $maxlength = floor( $lengthTranslated / 2);

    $halfmaxlength = floor( $maxlength / 2);

    $start = rand($halfmaxlength, $maxlength);

    $command3 = "$ffmpeg -y -acodec copy -ss $start -t $maxlength -i \"$mp3file\" $mp3filenew 2> /dev/null";


    exec($command3);

    @unlink($mp3file);
    rename($mp3filenew, $mp3file);
}

Yukarıdaki kod, bu kodun hangi yönü test case eklemek gerekir?

Bilginize: Yukarıdaki kod yarısında mp3 dosyası kesmek için kullanılır.

2 Cevap

Ben gördüğünüz gibi, harici bir program ffmpeg işi yapmak için kullanıyor. Yani benim öneri şunlardır:

1) komutunu test edin: Siz iki fonksiyonları içine bu fonksiyonu ayıklayın. Komutu üretmek için bir (bu durumda, $command3). Komutu geçerli olduğunu kontrol etmek için bir birim testi oluşturun. Başka bir işlev komutu çalıştırmak.

2) nihai sonucu sınayın. Elle, bir sonuç dosyası oluşturun. Hiç sonuç dosyası ne istediğiniz olduğundan emin olmak için (elle) ne almak etmeyin. , Komut oluşturmak çalıştırmak ve ardından yeni bir çıkış dosyası karşılaştırmak için bir birim testi ve daha önce oluşturmak var dosyası yazın. Karşılaştırma gibi bsdiff ya da karşılaştırmak byte-by-byte (fread akla geliyor) okumak için php kullanarak gibi araçlar yapılabilir.

(Her bant genişliği, örnekleme oranı veya codec gibi) bu testi yapmak için birden fazla dosya oluşturabilir.

Dönüştürme işlemi her zaman tam olarak aynı ikili üretmek eğer NOTE I ikinci test işe yaramayabilir.

NOTE II dönüşüm hep aynı ikili üretmez ya da diğer tüm dosyalarını temsil etmek için bir test dosyası olması mümkün değilse. Sen çıktı dosyasının biçimini bilerek daha şeffaf bir test yapmak ve analiz etmek gerekir. Örneğin, orijinal okumak ve ouptut dosya ses-uzunluk, örnekleme oranları ve karşılaştırın.

Umarım bu yardımcı olur.

EDIT Sana bir şey söylemeyi unuttum. Eğer ffmpeg güvenirsen. Sadece tamamen Testi 2 (ikili karşılaştırma) atlayın ve sadece komut kontrol edebilirsiniz.

Bu yaptığını bir kaç farklı şeyler gibi bu fonksiyon test birim olabilir. Ben test edilebilir küçük parçalar halinde kırarak başlamak istiyorum. Örneğin:

function doresize(&$mp3file)
{    
    $mp3file = move_to_tmp_if_not_already($mp3file);

    $lengthTranslated = getFileLengthTranslated($mp3file)

    $maxlength = floor( $lengthTranslated / 2);
    $halfmaxlength = floor( $maxlength / 2);
    $start = rand($halfmaxlength, $maxlength);
    $mp3filenew = extract_mp3($mp3file, start, $maxlength);

    @unlink($mp3file);
    rename($mp3filenew, $mp3file);
}