Я пытаюсь создать набор тестов, который я могу запускать программно. (Документация выполняет упомяните, что можно подтолкнуть IDE к выполнению теста, но мне кажется более регулярным подходом настроить набор тестов в виде стандартного модуля Ceylon, который имеет собственный запускаемый модуль. Кроме того, в документации ничего не говорится о том, как это сделать способ IDE).
Итак, я создаю TestRunner с использованием createTestRunner. Упомянутая функция принимает Sequential из TestSources ('TestSource[]
') в качестве первого аргумента. TestSource
— псевдоним для этого типа:
Module|Package|ClassDeclaration|FunctionDeclaration|Class<Anything,Nothing>|FunctionModel<Anything,Nothing>|String
В связи с этим возникает вопрос: Как я хочу передать свои тесты средству запуска тестов?
Для начала кажется, что проще всего поместить их в локальные функции, а затем позволить тестировщику каким-то образом получить доступ к этим функциям (дальше не указано). Поскольку длинный список типов, включенных в псевдоним TestSource
, похоже, не включает фактические Функции, я попытался найти ближайшего кандидата, который выглядел как правильный: FunctionDeclaration.
Чтобы сделать такое объявление функции, мне сначала нужно было подумать, как на самом деле могут выглядеть мои тестовые функции-оболочки. Возможно, что-то вроде этого?
Anything myTests1 () {
// assert something!
return null;
}
void myTests2 () {
// assert some more things!
}
(эти функции эквивалентны по типу, кстати)
После множества Изучение Ceylon Herd, я решил, что FunctionDeclaration
для таких функций может быть записано так:
// function name for function declaration:
LIdentifier funName = LIdentifier("myName");
// type of return value for function declaration:
UIdentifier returnTypeName1 = UIdentifier("Anything");
TypeNameWithTypeArguments returnTypeName2 = TypeNameWithTypeArguments(returnTypeName1);
BaseType returnType = BaseType( returnTypeName2 );
// type of parameters for function declaration:
Sequential<Parameter> parameters1 = []; // our test wrapper functions takes no arguments
Parameters parameters2 = Parameters( parameters1 );
Sequence<Parameters> parameterLists = [parameters2];
// the actual function declaration:
FunctionDeclaration myFunctionDeclaration = FunctionDeclaration(
funName,
returnType,
parameterLists
);
Так что теперь все, что мне нужно было сделать, это передать это в функцию createTestRunner
. Мне просто нужно было вставить myFunctionDeclaration
в TestSource[]
:
TestSource myTestSource = myFunctionDeclaration;
TestSource[] mySourceList = [myTestSource];
TestRunner myTestRunner = createTestRunner(mySourceList);
Но эта первая строка не работает. myFunctionDeclaration
типа 'FunctionDeclaration' просто не проходит как тип TestSource
. Почему бы и нет? Является ли FunctionDeclaration
неправильным типом TestSource? Глядя на определение псевдонима для TestSource
, FunctionDeclaration
кажется здесь в списке возможных типов:
Module|Package|ClassDeclaration|FunctionDeclaration|Class<Anything,Nothing>|FunctionModel<Anything,Nothing>|String
Что мне здесь не хватает?