Com base na resposta de Nate, tenho o seguinte:
def make_test_wrapper_for(command_module):
def _run_cmd_with(*args):
"""Run the possibly_add_alert command with the supplied arguments"""
cmd = command_module.Command()
(opts, args) = OptionParser(option_list=cmd.option_list).parse_args(list(args))
cmd.handle(*args, **vars(opts))
return _run_cmd_with
Uso:
from myapp.management import mycommand
cmd_runner = make_test_wrapper_for(mycommand)
cmd_runner("foo", "bar")
A vantagem aqui é que, se você usou opções adicionais e o OptParse, isso resolverá o problema. Não é perfeito - e ainda não canaliza resultados -, mas usará o banco de dados de teste. Você pode testar os efeitos do banco de dados.
Estou certo de que o uso do módulo de simulação Micheal Foords e também a reconexão do stdout durante a duração de um teste significariam que você também poderia aproveitar um pouco mais dessa técnica - teste a saída, as condições de saída etc.