Даниэль, я сделал это и заставил его работать, но может быть довольно неприятно получить DNN и все остальные кэши, очищенные для отображения. Я думаю, что существующий метод может быть оставлен на запасной вариант, но поскольку возможность получения иконки для отображения совершенно неочевидна. Хуже того, вы можете споткнуться о безвестность; Вы можете назвать свой cshtml-файл знаком + (например, «_Content - Text + Circle image.cshtml»), который отлично работает, но тогда идентичный PNG-файл не будет отображаться.
Было бы замечательно, если бы вы просто добавили новое поле в определение View и позволили нам назначить актив изображения - как и везде в пользовательском интерфейсе.
Я прокрутил свое собственное, потому что у меня не было времени для изучения кого-то elses способ сделать вещи, это заняло приблизительно 20 минут для описывания, 10 для адаптации его к регистрации здесь.
Unittesting очень полезен для меня.
это довольно длинно, но это объясняется и внизу существует пример.
/**
* Provides Assertions
**/
class Assert
{
public static function AreEqual( $a, $b )
{
if ( $a != $b )
{
throw new Exception( 'Subjects are not equal.' );
}
}
}
/**
* Provides a loggable entity with information on a test and how it executed
**/
class TestResult
{
protected $_testableInstance = null;
protected $_isSuccess = false;
public function getSuccess()
{
return $this->_isSuccess;
}
protected $_output = '';
public function getOutput()
{
return $_output;
}
public function setOutput( $value )
{
$_output = $value;
}
protected $_test = null;
public function getTest()
{
return $this->_test;
}
public function getName()
{
return $this->_test->getName();
}
public function getComment()
{
return $this->ParseComment( $this->_test->getDocComment() );
}
private function ParseComment( $comment )
{
$lines = explode( "\n", $comment );
for( $i = 0; $i < count( $lines ); $i ++ )
{
$lines[$i] = trim( $lines[ $i ] );
}
return implode( "\n", $lines );
}
protected $_exception = null;
public function getException()
{
return $this->_exception;
}
static public function CreateFailure( Testable $object, ReflectionMethod $test, Exception $exception )
{
$result = new self();
$result->_isSuccess = false;
$result->testableInstance = $object;
$result->_test = $test;
$result->_exception = $exception;
return $result;
}
static public function CreateSuccess( Testable $object, ReflectionMethod $test )
{
$result = new self();
$result->_isSuccess = true;
$result->testableInstance = $object;
$result->_test = $test;
return $result;
}
}
/**
* Provides a base class to derive tests from
**/
abstract class Testable
{
protected $test_log = array();
/**
* Logs the result of a test. keeps track of results for later inspection, Overridable to log elsewhere.
**/
protected function Log( TestResult $result )
{
$this->test_log[] = $result;
printf( "Test: %s was a %s %s\n"
,$result->getName()
,$result->getSuccess() ? 'success' : 'failure'
,$result->getSuccess() ? '' : sprintf( "\n%s (lines:%d-%d; file:%s)"
,$result->getComment()
,$result->getTest()->getStartLine()
,$result->getTest()->getEndLine()
,$result->getTest()->getFileName()
)
);
}
final public function RunTests()
{
$class = new ReflectionClass( $this );
foreach( $class->GetMethods() as $method )
{
$methodname = $method->getName();
if ( strlen( $methodname ) > 4 && substr( $methodname, 0, 4 ) == 'Test' )
{
ob_start();
try
{
$this->$methodname();
$result = TestResult::CreateSuccess( $this, $method );
}
catch( Exception $ex )
{
$result = TestResult::CreateFailure( $this, $method, $ex );
}
$output = ob_get_clean();
$result->setOutput( $output );
$this->Log( $result );
}
}
}
}
/**
* a simple Test suite with two tests
**/
class MyTest extends Testable
{
/**
* This test is designed to fail
**/
public function TestOne()
{
Assert::AreEqual( 1, 2 );
}
/**
* This test is designed to succeed
**/
public function TestTwo()
{
Assert::AreEqual( 1, 1 );
}
}
// this is how to use it.
$test = new MyTest();
$test->RunTests();
Это производит:
Test: TestOne was a failure /** * This test is designed to fail **/ (lines:149-152; file:/Users/kris/Desktop/Testable.php) Test: TestTwo was a success
phpunit по сути является средой модульного тестирования для php. есть также DocTest (доступен в виде пакета PEAR) и несколько других. Сам php тестируется на регрессии и т.п. с помощью тестов phpt , которые также можно запускать с помощью pear.