2010-05-15 2 views
1

Мне нужно это в FlexUnit для тестирования частных методов. Есть ли возможность сделать это с помощью отражения с помощью describeType или, возможно, flexUnit имеет некоторую функцию сборки? Мне не нравится искусственное ограничение, что я не могу тестировать частные функции, это значительно снижает гибкость. Да, это хороший дизайн для проверки частных функций, поэтому, пожалуйста, не советуйте мне реорганизовывать мой код. Я не хочу разрушать инкапсуляцию ради модульного тестирования.Вызов частного метода в Flex, Actionscript

ответ

6

Я на 99% уверен, что это невозможно, и я заинтригован, чтобы узнать, почему вы хотели бы это сделать.

Вы должны быть модулем, тестирующим выход данного класса на основе данных входов, независимо от того, что происходит внутри класса. Вы действительно хотите разрешить кому-либо изменять детали реализации до тех пор, пока они не изменят ожидаемые выходы (определенные модульным тестом).

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

Я уверен, что есть случаи, когда тестирование частных методов может быть полезным, но я бы ожидал, что в большинстве случаев это просто не нужно. Вам не нужно прерывать инкапсуляцию, просто проверьте, что вызовы вашего метода дают правильные результаты ... независимо от того, что делает код внутри.

1

Вы не можете использовать describeType.

От Livedocs - flash.utils package:

[...]

Примечание:describeType() показывает только общедоступные свойства и методы, и не будет показывать свойства и методы, которые являются закрытыми, внутренними для пакета или в пользовательских пространствах имен.

[...]

2

Просто создать публичный метод под названием «UnitTest» и назвать все модульные тесты в рамках этого метода. Бросьте ошибку, когда один из них не удается, и вызвать его из тестовой базы:

try { 
    myobject.unitTest(); 
} catch (Exception e) { 
    //etc. 
} 
0

Когда желание испытать частный метод неотразимо я просто создать проверяемых имен для метода.

Объявить пространство имен в файле, как это:

package be.xeno.namespaces 
{ 
    public namespace testable = "http://www.xeno.be/2015/testable"; 
} 

Затем вы можете использовать проверяемые в качестве модификатора пользовательского доступа для метода вы хотите проверить, как это:

public class Thing1 
{ 
    use namespace testable; 

    public function Thing1() 
    { 
    } 

    testable function testMe() : void 
    { 

    } 
} 

Вы можете затем получите доступ к этому модификатору, используя пространство имен в ваших тестах:

public class Thing2 
{ 
    use namespace testable; 

    public function Thing2() 
    { 
     var otherThing : Thing1 = new Thing1(); 
     otherThing.testMe(); 
    } 
} 

Действительно, хотя я t hink - это намек на то, что вы должны разделить свою функциональность на отдельный класс.