2009-10-20 1 views
1

Я только что пробовал ASUnit, и это не удалось, , поэтому я ищу что-то более простое, не нужно причудливого интерфейса. след мощность в порядке.Рамки UnitTest для AS2?

ASUnit не был успешным, потому что по какой-то странной причине генерировал файлы AllTests.as во всех поддиректорах/Приложения. Я не могу понять, как остановить это, поэтому я ищет что-то более простое. Я провел много модульного тестирования в рубине, C++ и объективе c, поэтому он не совсем новый для меня.

Мой проект нацелен на Flash 9 и использует ActionScript 2. Я работаю во Flash CS4.

Код, требующий тестирования, - это математические функции, которые принимают один или два аргумента с плавающей запятой и возвращают значение с плавающей запятой, , поэтому оно хорошо подходит для тестирования.

Любые идеи?

UPDATE: теперь я написал свой собственный тестовый код, вот оно. quickndirty.

function run_tests(test_function_names:Array):Void { 
    trace("running tests"); 
    var tests_passed:Number = 0;   
    var tests_failed:Number = 0;  
    var tests_total:Number = test_function_names.length; 

    for(var i=0; i<tests_total; ++i) { 
     var funname = test_function_names[i]; 
     var fun = this[funname]; 
     if(typeof fun != 'function') { 
      throw("ERROR: " + funname + " is not a function!"); 
      return; 
     } 
     trace("testing .... " + funname); 
     try { 
      fun.call(this); 
      tests_passed += 1; 
     } catch(msg) { 
      trace("ERROR: " + funname + "\n" + msg); 
      tests_failed += 1; 
     } 
    } 
    if(tests_failed > 0) { 
     trace("" + tests_failed + " of " + tests_total + " tests failed."); 
    } else { 
     trace("All " + tests_total + " tests executed successfully"); 
    } 
} 

public function assert_equal_float(v_expected:Number, v_actual:Number, v_precision:Number) { 
    if(v_actual == undefined) { 
     throw "v is undefined"; 
    } 
    var v = v_expected - v_actual; 
    if(v < 0) v = -v; 
    if(v > v_precision) { 
     var s1:String = MYUtils.print_r(v_expected); 
     var s2:String = MYUtils.print_r(v_actual); 
     var s:String = "expected " + s1 + ", but got " + s2; 
     throw s.split("\n").join(""); 
    } 
} 

public function test_a():Void { 
    assert_equal_float(2, 2, 0.01); 
} 

public function test_b():Void { 
    assert_equal_float(2.9999, 3.001, 0.01); 
} 

public function test_c():Void { 
    assert_equal_float(3, 3, 0.01); 
} 

function run():Void { 
    var test_function_names:Array = new Array(
     "test_a", 
     "test_b", 
     "test_c" 
    ); 
    run_tests(test_function_names) 
} 

выхода, как это:

running tests 
testing .... test_a 
testing .... test_b 
testing .... test_c 
All 3 tests executed successfully 
+0

из интереса, если ваш таргетинг Flash Player 9 и с помощью CS4, почему вы кодирования в AS2? :) – Allan

+0

Таргетинг Flash Player 9 - это требование для проекта, над которым я работаю. И это мой первый флеш-проект! Я не думаю, что его можно использовать AS3 с Flash Player 9. Очень сложно найти документацию по AS2, большую часть времени я сталкиваюсь с информацией о Flex, Air, AS3. Исходя из C в AS, я ДЕЙСТВИТЕЛЬНО пропустил printf. И никакого встроенного регулярного выражения это ужасно! Надеюсь, AS3 менее болезненна. – neoneye

ответ

1

Я думаю, что не много рамок модульного тестирования для as2 ...

Я нашел as2lib, домашняя страница мертва, но вы все еще можете пойти к его API page и получить его код project on SourceForge

astuce тоже. Но его развитие as2 прекращено.

Вы можете попробовать порт PerformanceTest from gskinner к AS2 тоже ...: P

+0

Спасибо Энди. Согласитесь, его несчастливо, что многие важные страницы замерли через несколько лет. Эти проекты выглядят очень полезными. – neoneye