http: //parasol.tamu.
Я создаю библиотеку, которая включает в себя код Clojure и Java, и хотел бы иметь возможность запускать один тестовый набор JUnit для всей базы кода. Кажется, это должно быть возможно, поскольку они оба работают на JVM и имеется хорошее взаимодействие Clojure / Java.
Однако в настоящее время код Clojure, похоже, отдает предпочтение модульному тестированию, выполняемому через API clojure.test с использованием "(run-all- tests) "и друзья.
Есть ли хороший способ обернуть эти тесты Clojure в какую-то оболочку, чтобы их можно было автоматически вызывать из JUnit?
(когда я говорю «автоматически», я имею в виду, не прибегая к ручному решению написания тестового примера JUnit, чтобы обернуть и вызвать каждый тестовый пример Clojure индивидуально:
m пытается реализовать систему «подкоманд» как наследуемый класс в Python. Мой ожидаемый вариант использования выглядит примерно так: from command import Command
import sys class MyCommand (Command): @ ...
Я пытаюсь реализовать систему «подкоманд» как наследуемый класс в Python. Мой ожидаемый вариант использования выглядит примерно так:
from command import Command
import sys
class MyCommand(Command):
@Command.subcommand
def foo(self):
print "this can be run as a subcommand"
def bar(self):
print "but this is a plain method and isn't exposed to the CLI"
MyCommand()(*sys.argv)
# at the command line, the user runs "mycommand.py foo"
Я реализовал Command.subcommand
как статический метод, и все работало нормально, пока я не попытался добавить подкоманду в родительский класс, в результате чего я получил TypeError: Объект staticmethod не вызывается
. Оглядываясь назад, очевидно, что этот не будет работать:
class Command(object):
@staticmethod
def subcommand(method):
method.is_subcommand = True
return method
@subcommand
def common(self):
print "this subcommand is available to all child classes"
Единственная альтернатива, которую я нашел до сих пор, - объявить декоратор подкоманды
вне родительского класса, а затем внедрить его после того, как определение класса завершено.
def subcommand(method):
method.is_subcommand = True
return method
class Command(object):
@subcommand
def common(self):
print "this subcommand is available to all child classes"
Command.subcommand = staticmethod(subcommand)
del subcommand
Однако, как человеку, который никогда не использовал Python до того, как были добавлены декораторы, мне это кажется очень неуклюжим. Есть ли более элегантный способ сделать это?