Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 单元测试返回类型来自另一个包的类方法_Php_Unit Testing_Testing_Phpunit - Fatal编程技术网

Php 单元测试返回类型来自另一个包的类方法

Php 单元测试返回类型来自另一个包的类方法,php,unit-testing,testing,phpunit,Php,Unit Testing,Testing,Phpunit,我在网上浏览了几个小时,试图找到一种方法来做到这一点,但我必须承认,我在这里遇到了死胡同,所以我想我应该向社区寻求一些帮助。让我首先向你描述一下上下文 我有一个名为Parser的类,它实现了一个ParserInterface,如下所示: 使用OtherPackage\Message\MessageInterface; 接口解析器接口 { 公共函数解析(字符串$raw):MessageInterface; } 我想测试parse方法,以确保根据我给它的值得到正确的结果。我的实现如下所示: 使用O

我在网上浏览了几个小时,试图找到一种方法来做到这一点,但我必须承认,我在这里遇到了死胡同,所以我想我应该向社区寻求一些帮助。让我首先向你描述一下上下文

我有一个名为
Parser
的类,它实现了一个
ParserInterface
,如下所示:

使用OtherPackage\Message\MessageInterface;
接口解析器接口
{
公共函数解析(字符串$raw):MessageInterface;
}
我想测试
parse
方法,以确保根据我给它的值得到正确的结果。我的实现如下所示:

使用OtherPackage\Message\Message;
使用OtherPackage\Message\MessageInterface;
类解析器实现ParserInterface
{
公共函数解析(字符串$raw):MessageInterface
{
返回新消息();
}
}
如您所见,我的
parse
方法上的返回类型是向
MessageInterface
提示的类型,我实际上返回的是
消息
(它实现了
MessageInterface
)。它们都是我从另一个包导入的

我想我在这里要问的是:如何对返回类型来自另一个包的方法进行单元测试?

我试图通过对return
Message
对象进行断言来测试返回值,但我不确定这是正确的方法。我不是应该这样测试
消息
类吗?如果不是,我的类已经依赖于这个外部包,我的测试依赖于这个包可以吗

我在这里可能有点不知所措,解决办法可能很明显,但我想征求第二个意见并没有坏处

另外,让我说这是我第一次在论坛上提问


干杯。

我认为你的想法很正确。在测试中,您可以调用
Parser->parse()
函数,并在其上断言它的类型正确(
assertInstanceOf(Message:class,$parsedResponse)
)。您不是在测试另一个包,您只是想确保您的解析函数执行并返回您所期望的内容。听起来不错。谢谢你花时间回复。假设我的解析器的任务是解析原始消息,并返回一个消息对象,该对象具有一个名为
myprop
的公共属性,其值为
myvalue
。我应该断言在这个测试中,
$parser->parse(…)->myprop
等于
value
?我希望我说的有道理。@Nico公共属性可以工作,但不需要显式地检查返回类型。若方法返回的内容不是在返回类型中定义的,那个么它将被视为错误。考虑到公共财产,根据坚实的原则,不需要公共财产。改用getter。