У меня есть декоратор @login_testuser
относившийся метод test_1()
:
class TestCase(object):
@login_testuser
def test_1(self):
print "test_1()"
Есть ли способ, которым я могу подать заявку @login_testuser
на каждом методе класса, снабженного префиксом "test_"
?
Другими словами, декоратор обратился бы test_1()
, test_2()
методы ниже, но не на setUp()
.
class TestCase(object):
def setUp(self):
pass
def test_1(self):
print "test_1()"
def test_2(self):
print "test_2()"
В Python 2.6, декоратор класса - это определенно то, что нужно. Например, вот довольно общий для такого рода задач:
import inspect
def decallmethods(decorator, prefix='test_'):
def dectheclass(cls):
for name, m in inspect.getmembers(cls, inspect.ismethod):
if name.startswith(prefix):
setattr(cls, name, decorator(m))
return cls
return dectheclass
и теперь, просто
@decallmethods(login_testuser)
class TestCase(object):
def setUp(self):
pass
def test_1(self):
print "test_1()"
def test_2(self):
print "test_2()"
получит то, что вы хотите. В Python 2. 5 или хуже, синтаксис @decallmethods
не работает для украшения классов, но в остальном точно такой же код вы можете заменить следующим утверждением сразу после конца утверждения class TestCase
:
TestCase = decallmethods(login_testuser)(TestCase)
Конечно. Перебрать все атрибуты класса. Убедитесь, что каждый из них является методом и начинается ли его имя с «test_». Затем замените его функцией, возвращенной вашим декоратором
Примерно так:
from inspect import ismethod, getmembers
for name, obj in getmembers(TestCase, ismethod):
if name.startswith("test_"):
setattr(TestCase, name, login_testuser(obj))
Сначала найдите во всех процессах процесс, который вы хотите убить, а не убейте его.
Process[] runningProcesses = Process.GetProcesses();
foreach (Process process in runningProcesses)
{
// now check the modules of the process
foreach (ProcessModule module in process.Modules)
{
if (module.FileName.Equals("MyProcess.exe"))
{
process.Kill();
}
}
}
-121--231428- javascript не изменяет способ проводки значений? Если вы не можете получить доступ к значениям через PHP, как обычно, через $ _ POST ['name _ of _ input _ goes _ here']
edit: вы всегда можете выгрузить содержимое $ _ POST, чтобы увидеть, что вы получаете из формы javascript с помощью print _ r ($ _ POST)
. Это даст вам представление о том, что вам нужно сделать в PHP, чтобы получить доступ к нужным данным.
Да, можно закольцовывать dir
/ __ dict __
класса или использовать метакласс, определяющий, начинаются ли атрибуты с «test». Однако это создаст менее простой, явный код, чем явное написание декоратора.
Вы уверены, что было бы лучше, если вместо этого поместили код login_testuser в setUp? Для этого и предназначен setUp: он запускается перед каждым методом тестирования.