Инструмент тестирования Fitnesse Acceptance: как сказать, что фитнес не должен пропускать символы пробела - PullRequest
0 голосов
/ 12 сентября 2018

я пишу тестовые данные на языке котлина, и, как вы знаете, в имени класса могут быть пробелы и даже имя функции с использованием обратных тиков

я пишу таблицы с использованием персидского языка и когдаFitneese пытается найти класс или функцию, он просто удаляет все пробелы и ищет target.so, чтобы сделать классы и функции доступными для Fitnesse, мне нужно объединить все слова, и он просто читает бессмыслицу в фикстурекласс при использовании персидского.

Я ищу способ рассказать о фитнесе, отключить механизм удаления пробелов

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

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

в соответствии с решением @Fried Hoeben я реализовал свой собственный класс взаимодействия по умолчанию, который сначала удаляет пробелы всех имен методов класса, а затем проверяет его на соответствие имени метода из уже оформленного Fitnesse и его пробелов.

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

, поэтому используйте его для сопоставления методов, а не сопоставления классов:

class MyDefaultInteraction: DefaultInteraction() {

    override fun findMatchingMethod(methodName: String, instance: Any, vararg args: Any?): Method? {

        instance.javaClass.methods.forEach {

            if(doMethodMatchWithGivenMethodNameAndArguments(it,methodName,args))
                return it
        }


        return super.findMatchingMethod(methodName, instance, *args)
    }


    private fun doMethodMatchWithGivenMethodNameAndArguments(method: Method, givenMethodName: String, args: Array<out Any?>)=
       (decorateMethodNameToBeMatchCandidate(givenMethodName) == decorateMethodNameToBeMatchCandidate(method.name) && doArgsMatch(method, args))


    private fun decorateMethodNameToBeMatchCandidate(name:String) =  name.replace(" ", "")
            .replace(",", "").toLowerCase()

    private fun doArgsMatch(method: Method, args: Array<out Any?>) = method.parameterTypes.size == args.size

}
0 голосов
/ 13 сентября 2018

Насколько я знаю, невозможно изменить поведение FitNesse в этом отношении "из коробки".

То, что вы можете попробовать, - это создание собственного класса взаимодействия (подкласс fitnesse.slim.fixtureInteraction.DefaultInteraction), который разрешает классы и методы / функции другим способом.

В вики вы можете указать, что ваше пользовательское взаимодействие должно использоваться вместо DefaultInteraction на корневой странице вашего набора, !define slim.flags {-i your.package.YourOwnInteraction}

...