Вызов частного метода во Flex, Actionscript - PullRequest
1 голос
/ 15 мая 2010

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

Ответы [ 4 ]

6 голосов
/ 15 мая 2010

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

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

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

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

2 голосов
/ 21 июня 2010

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

try {
   myobject.unitTest();
} catch (Exception e) {
   //etc.
}
1 голос
/ 16 мая 2010

Для этого нельзя использовать describeType.

Из Livedocs - пакет flash.utils :

[...]

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

[...]

0 голосов
/ 07 мая 2011

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

Объявление пространства имен в файле следующим образом:

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();
    }
}

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

...