统一测试PHP&;嘲弄
我试图编写一个测试类,但这是我第一次这么做,所以我对从类中得到的示例有点迷茫 这是我的交换班:统一测试PHP&;嘲弄,php,unit-testing,Php,Unit Testing,我试图编写一个测试类,但这是我第一次这么做,所以我对从类中得到的示例有点迷茫 这是我的交换班: <?php //require 'User.php'; require 'Product.php'; require 'EmailSender.php'; require 'DatabaseConnection.php'; class Exchange{ private $dateDebut; private $dateFin; private $receiver; private $p
<?php
//require 'User.php';
require 'Product.php';
require 'EmailSender.php';
require 'DatabaseConnection.php';
class Exchange{
private $dateDebut;
private $dateFin;
private $receiver;
private $product;
private $owner;
private $emailSender;
private $dbConnexion;
function __construct($dateDebut, $dateFin, $receiver, $product, $owner)
{
$this->dateDebut = $dateDebut;
$this->dateFin = $dateFin;
$this->receiver = $receiver;
$this->product = $product;
$this->owner = $owner;
$this->emailSender = new EmailSender();
$this->dbConnexion = new DatabaseConnection();
}
public function save($dateDebut, $dateFin)
{
if($this->owner->isValid()){
$checkOwner = true;
}
if($this->receiver->isValid()){
$checkReceiver = true;
}
if($this->product->isValid()){
$checkProduct = true;
}
if(!empty($dateDebut) && $dateDebut > date("Y-m-d")){
$checkDateDebut = true;
}
if(!empty($dateFin) && $dateFin > date("Y-m-d") && $dateFin > $dateDebut){
$checkDateFin = true;
}
if($checkProduct == true && $checkReceiver == true && $checkOwner == true && $checkDateFin == true && $checkDateDebut == true){
if($this->receiver->age < 19){
$this->emailSender->sendMail($this->receiver->getEmail(), "Moins de 18 ans");
}
// enregistrer en base
return 12;
}
else{
return false;
}
}
// Liste des setters
public function setDateDebut($dateDebut)
{
$this->dateDebut = $dateDebut;
}
public function setDateFin($dateFin)
{
$this->dateFin = $dateFin;
}
public function setReceiver($receiver)
{
$this->receiver = $receiver;
}
public function setProduct($product)
{
$this->product = $product;
}
public function setOwner($owner)
{
$this->owner = $owner;
}
public function setEmailSender($emailSender)
{
$this->emailSender = $emailSender;
}
public function setDBConnexion($dbConnexion)
{
$this->dbConnexion = $dbConnexion;
}
// Liste des getters
public function getDateDebut()
{
return $this->dateDebut;
}
public function getDateFin()
{
return $this->dateFin;
}
public function getReceiver()
{
return $this->receiver;
}
public function getProduct()
{
return $this->product;
}
public function getOwner()
{
return $this->owner;
}
public function getEmailSender()
{
return $this->emailSender;
}
public function getDBConnexion()
{
return $this->dbConnexion;
}
}
?>
任何关于酉测试的帮助都会很好,谢谢,我得到的错误是函数数据仍然为null。看起来您已经定义了一个尚未填充的属性,因此当您使用它时,没有对象可以运行方法,并且会出错 在大多数单元测试场景中,您希望每个测试尽可能独立,以避免一个测试在另一个测试中导致级联失败。将其设置为局部变量应该可以解决问题:
public function testSave()
{
$exchange = new Exchange(...);
$result = $this->exchange->save("2017-11-18", "2017-11-20");
$this->assertEquals($result, 12);
}
您希望创建某种类型的
exchange()
factory方法来正确初始化exchange
实例,以避免在每个测试中重复大量样板文件。看起来您已经定义了一个未填充的属性,因此,当您使用它时,没有对象可以在其上运行方法,它会出错
在大多数单元测试场景中,您希望每个测试尽可能独立,以避免一个测试在另一个测试中导致级联失败。将其设置为局部变量应该可以解决问题:
public function testSave()
{
$exchange = new Exchange(...);
$result = $this->exchange->save("2017-11-18", "2017-11-20");
$this->assertEquals($result, 12);
}
你想创建一个
exchange()
factory方法来正确初始化exchange
实例,以避免在每次测试中重复大量的样板文件。Huh老师告诉我们,如果是学术练习,我们必须从头开始做,使用单元测试绝对是确保正确执行的方法,所以做得很好。我只是担心人们这样做是因为他们认为这是必要的。我编辑了一个错误,上面写着“致命错误:在null上调用成员函数save()”哦,好吧,我想我得到了感谢,老师告诉我们,如果这是一个学术练习,我们必须从头开始做,使用单元测试绝对是确保正确执行的方法,所以做得很好。我只是担心人们这样做是因为他们认为这是必要的。我编辑了一个错误,上面写着“致命错误:在null上调用成员函数save()”哦,好的,我想我已经加入了,我忘了提到的最后一件事,我需要分别从类User、Product和其他User创建3个对象,在这些类中,我得到了检查一些参数的函数isValid,如何初始化它们?通过模拟?因为您试图测试实际代码,所以模拟在这里不相关。像往常一样初始化它们,练习它们,用断言进行验证。最后一件事我忘了提到,我需要分别从类User、Product和other User创建3个对象,在这些类中,我得到了检查一些参数的函数isValid,我如何初始化它们?通过模拟?因为您试图测试实际代码,所以模拟在这里不相关。像通常一样初始化它们、练习它们、使用断言进行验证。
public function testSave()
{
$exchange = new Exchange(...);
$result = $this->exchange->save("2017-11-18", "2017-11-20");
$this->assertEquals($result, 12);
}