Это зависит от того, под чем Вы подразумеваете безопасный. Существует несколько проблем, которые я сразу вижу:
char * const
, который позволит вызывающим сторонам менять струну в этом местоположении. Потенциальное переполнение буфера. Или Вы имели в виду const char *
? Для объяснения второго рассмотрите это:
const char * const format_error_message(int err)
{
static char error_message[MAXLEN_ERROR_MESSAGE];
sprintf(error_message, "Error %#x occurred", err);
return error_message;
}
, Если Вы называете его как это:
int a = do_something();
int b = do_something_else();
if (a != 0 && b != 0)
{
fprintf(stderr,
"do_something failed (%s) AND do_something_else failed (%s)\n",
format_error_message(a), format_error_message(b));
}
..., что будет печатным?
То же для поточной обработки.
Вы можете использовать методы setUp () и tearDown () с частной или защищенной переменной. setUp () вызывается перед каждым методом testXxx (), а tearDown () вызывается после. Это дает вам чистый лист для работы с каждым тестом.
class TestClass extends PHPUnit_Framework_TestCase {
private $myClass;
public function setUp() {
$this->myClass = new MyClass();
}
public function tearDown() {
$this->myClass = null;
}
public function testSomething() {
$this->assertTrue($this->myClass->someFunc(1));
}
public function testSomethingAgain() {
$this->assertFalse($this->myClass->someFunc(0));
}
}