Ошибка проверки Mockolate: недопустимое переопределение .. после обновления Flex SDK 4.10

Поскольку мы обновили flex sdk в нашем приложении до 4.10, мы столкнулись с проверкой ошибок при выполнении модульных тестов, использующих mockolate.

Кажется, они возникают при имитации интерфейса, где ByteArray используется в сигнатуре метода.

Пример интерфейса:

public interface IFileSystemHelper {

    function loadFileContents(path:String):ByteArray;

}

Пример тестового класса:

public class SomeTest {

    [Rule]
    public var mockolateRule:MockolateRule = new MockolateRule();

    [Mock]
    public var fileHelper:IFileSystemHelper;

    public function SomeTest() {
    }

    [Test]
    public function testMethod():void {
        // ...
    }
}

При компиляции и запуске теста с помощью flexmojos 6.0.1 выдается следующая ошибка:

VerifyError: Ошибка № 1053: Незаконное переопределение IFileSystemHelper8F2B5D281827800A824B85B588C6F2A08AE814ED в mockolate.generated.IFileSystemHelper8F2B5D281827800A824B85B588C6F814ED08A

Мое первоначальное подозрение было связано с проблемой версии sdk с playerglobal (или airglobal в нашем случае), поэтому я перекомпилировал mockolate (и flexunit) с sdk 4.10 без каких-либо результатов.

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

Есть ли у кого-нибудь подобная проблема?

Спасибо


person Bert    schedule 07.01.2014    source источник
comment
Итак, я предполагаю, что у вас есть интерфейс IFileSystemHelper, и mockolate создает класс для реализации макета. Можете ли вы где-нибудь увидеть сгенерированный код? Судя по этому другому сообщению, stackoverflow.com/questions / 4450302 / в конечном итоге ваша проблема в том, что вы изменили подпись IFileSystemHelper, но сгенерированный фиктивный код не был обновлен? Следовательно, старый сгенерированный класс будет выполнять незаконное переопределение, потому что подписи не совпадают?   -  person Christofer Dutz    schedule 09.01.2014
comment
Подпись этого метода не изменилась, как и тест. Я не смотрел сгенерированный код, сначала попробую, спасибо за указатель! :-)   -  person Bert    schedule 09.01.2014
comment
Боюсь, что в сгенерированных источниках и подписях нет ничего странного.   -  person Bert    schedule 09.01.2014
comment
Думаю, было бы неплохо связаться с парнями-насмешниками ... Я предполагаю, что они знают, что происходит не так, или, по крайней мере, как отследить проблему. На данный момент я предполагаю, что проблема не связана напрямую с новой версией Flex SDK, Mavenizer или Flexmojos, а скорее с тем, как Mockolate делает вещи ... к сожалению, для меня это черный ящик.   -  person Christofer Dutz    schedule 09.01.2014


Ответы (1)


Эта проблема обычно возникает при компиляции разных частей вашего приложения с разными версиями SDK.

Я бы рекомендовал взглянуть на вывод «mvn dependency: tree», так как он должен выводить все зависимости (прямые и транзитивные). Возможно, это поможет вам определить, откуда пришла неправильная версия.

person Christofer Dutz    schedule 08.01.2014
comment
Привет, Крис, это было мое первое предположение, но проверка зависимостей не дала особого результата :-). - person Bert; 09.01.2014
comment
Я даже выделил проблему в отдельный проект, используя только необходимые гибкие и воздушные зависимости, mockolate и flexunit. (что исключает любую проблему с другими зависимостями). Я только добавил пример интерфейса и теста, о котором я упоминал выше, но безуспешно. - person Bert; 09.01.2014
comment
Другая проблема может заключаться в том, что вы используете rsls или обычные библиотеки, которые включают классы фреймворка (своего рода статически связанные библиотеки), но я думаю, это немного сложнее выяснить. Вы можете использовать IntelliJ, чтобы сообщить вам, откуда он получает класс ByteArray. Если он найдет это более чем в одном, у вас проблемы. Не знаю, умеет ли FB это делать. Если вы не открываете библиотеки с помощью zip-архива и просматриваете манифест, это должно помочь. Судя по вашему второму комментарию, возможно, mockolate включает в себя сатически связанный класс? - person Christofer Dutz; 09.01.2014
comment
IntelliJ указывает мне только на один класс ByteArray в airglobal swc (правильный). Я проверил отчет о манифесте и ссылках mockolate при перекомпиляции с SDK 4.10, но я не смог найти никаких тегов сценария, ссылающихся на код фреймворка (только теги зависимостей и внешние элементы). Это оказалось настоящей дурацкой :-). В любом случае спасибо за вашу помощь и за всю вашу отличную работу над FlexMojos! - person Bert; 09.01.2014