我对phpUnit有点陌生,经过几个小时的研究,我还没有找到一个方法。我如何使用phpUnit测试函数get的结果。
函数getResults和getResultsDetails属于结果类。函数searchUser属于用户类。要获得pass登录,我可以使用用户名和密码在登录对象中调用doLogin,它将保留在$_SESSION中
class Result {
public function __construct()
{
if(!isset($_SESSION)){
session_start();
}
$this->loginObject = new Login();
}
public function getResults($fName, $lName)
{
$result = searchUser($fName, $lName);
while ($row = mysql_fetch_assoc($results)) {
$userIDs = $result['id'] . ',';
}
return
array(
'userIDs' => $userIDs,
'count' => getResultDetails($userIDs),
'results' => getResultDetails($userIDs, 0, 500),
)
}
如果传入了限制和偏移量,则返回结果,否则返回所有内容的计数
public function getResultDetails($userIDs, $limit = null, $offset =null)
{
if(!$this->beforeFilter()) return "logout";
//open db connection
$sql = '';
if(!$limit && !$offset)
{
$sql .= 'SELECT count(*) ';
} else {
$sql .= 'SELECT a.info, b.info, d.info ';
}
$sql .= 'FROM a ';
$sql .= 'inner join b on blah blah';
$sql .= 'inner join d blah blah';
$sql .= "where d.userID in ($userIDs)";
if($limit && $offset)
$sql .= "LIMIT $limit, $offset";
return mysql_query($sql);
}
}
搜索用户属于用户类类患者{公共函数__construct(){if(! isset($_SESSION)){session_start(); } $
public function searchUser($fName, $lName)
{
if(!$this->beforeFilter()) return "logout";
// logic to do search user and return user result mysq_query($sql)
return userIDs;
}
}
为此,您需要使用存根/模拟。基本上你不需要测试搜索用户,也不想要getResult方法单元测试中的getResultDetails方法。所以你必须嘲笑他们,只检查他们是否用适当的参数调用。
您将为此使用 phpunit mock。
第一步是设置任何预期值并构建mock:
$someExpectedUser = 123;
$expectedCount = 234;
$expectedResult = array('blablabla');
$object = $this->getMock('YourTestedClass', array('searchUser', 'getResultDetails'));
您现在已经创建了模拟对象。第一个参数是您的类的名称,第二个参数是数组,其中包含您想要模拟的方法的名称(请注意,您没有在第二个参数中指定“getResault”方法——这意味着当您在$对象上调用此方法时——将调用真正的方法)。
下一步是指定搜索用户的行为:
$object->expects($this->once())
->method('searchUser')
->with($fName, $lName)
->will($this->returnValue($someExpectedUser));
getResult详细信息方法相同:
$object->expects($this->at(1))
->method('getResultDetails')
->with($someExpectedUser)
->will($this->returnValue($expecedCount));
$object->expects($this->at(2))
->method('getResultDetails')
->with($someExpectedUser, 0, 500)
->will($this->returnValue($expecedResults));
然后你所需要的只是调用测试的方法并检查它是否返回 exped 值:
$expectedResult = array(
'userIDs' => $someExpectedUser,
'count' => $expectedCount,
'results' => $expectedResult
);
$result = $object->getResult($fName, $lName);
$this->assertEquals($expectedResult, $result);
如果你有什么不清楚的地方,请告诉我。
问候!
我想在我的项目中测试特定的测试类,因为有很多测试类失败,我只想一次测试一个类。 我在以下文件夹中创建了测试类: 因此,我尝试了以下命令,但均无效: = 有什么帮助吗?谢谢
问题内容: 我正在寻找一种快速(真正快速)的方法来测试对hibernate查询的更改。我有一个庞大的应用程序,它具有成千上万个不同的HQL查询(在XML文件中)和100多个映射的类,我不想重新部署整个应用程序,以仅测试对查询的一个微小更改。 好的设置如何使我免于重新部署并启用快速查询检查? 问题答案: 在Intellij IDEA 8.1.3中,选择的机制称为“ Facet”。立即测试HQL查询:
我一直试图让phpUnit在我的Wordpress主题的自定义PHP类上运行测试,但是无论我如何尝试添加类引用,错误总是相同的: 文件目录不正确。 为了说明这一点,Phpunit运行良好,因为我可以只使用Wordpress调用运行虚拟测试,而且它可以正常工作。例如: 文件结构如下所示: 我的朋友。xml位于WordPress根目录下,我指的是如下测试: 如果有人能告诉我为什么phpunit不能识别
我的actor运行在默认的akka调度程序上,然后调用一个返回Future的方法。我配置了不同的executioncontexts让所有的futures运行(因为它们是阻塞的(由于db调用),并且让actordispatcher只专用于非阻塞actors。想知道这段代码是否可以使用Akka testkit进行测试(继续使用两个执行上下文等)?如果是的话,那么配置测试的方法是什么,让Actor运行在
问题内容: 我奋力奔跑名为单个测试方法在文件中使用。我尝试了以下组合: 在每种情况下, 都将执行文件中的 所有 测试方法。如何只选择一种方法呢? 该类的名称为,版本为3.2.8。 问题答案: 以下命令在单个方法上运行测试: 对于新版本的phpunit,它只是:
我正在努力运行一个名为的测试方法,该方法位于文件中。我尝试了以下组合: 在每种情况下,都会执行文件中的所有测试方法。如何只选择一种方法? 该类的名称为,的版本为3.2.8。