gpt4 book ai didi

PHPUnit - 为接口(interface)编写测试类,并使用工厂测试对象

转载 作者:行者123 更新时间:2023-12-02 17:39:44 24 4
gpt4 key购买 nike

我正在编写一个将继承接口(interface)的类。将为该接口(interface)编写客户端代码,并编写支持该接口(interface)的类。我的想法是,我稍后将为该接口(interface)编写其他类,并且这两个不同类的对象应该完全可以互换。我不想为第一个类编写测试类,而是想为接口(interface)编写一个测试类。

我的计划是编写一个测试类,该类将采用工厂对象作为构造函数(依赖注入(inject)),并使用该工厂创建被测类的新实例。

这样,如果我想测试 ClassA,我可以将 ClassAFactory 对象传递给测试类的构造函数,如果我想测试 ClassB,我将传递一个 ClassBFactory 对象。这两个类都被设计为可以互换,并且由于只应该测试公共(public)方法,因此这似乎是理想的。

但是测试构造函数怎么样?我是否可以更好地编写一个抽象测试类并在继承抽象测试类的类中实现构造函数测试(不同的类可能会以不同的方式实例化)?

如果我确实使用第一个想法,我想我将为每个正在测试的类创建一个测试类,例如:

class ClassATest extends [PHPUnit test case]
{
$myFactory = new ClassAFactory();
$myTest = new ClassTest($myFactory);

$myTest->test1();
$myTest->test2();
//etc.
}

解决这个问题的最佳方法是什么?我想要进行一般测试,以便当我编写新类来实现公共(public)接口(interface)时,我可以放置与其他测试相同的测试对象。但是,鉴于不同的类有不同的构造函数,也许编写一个抽象测试类并为每个新对象扩展它会更好?你觉得怎么样?

最佳答案

我认为你需要重新考虑你的计划。您无法测试接口(interface),这是有充分理由的 - 接口(interface)仅定义 API 而不是功能,测试测试功能。让我举一个可能有帮助的例子。假设您有一个“消息传递”界面。因此,您实现了一个 EmailMessager 和一个 SMSMessager。现在您需要单独测试这些,就像使用 EmailMessager 一样,您需要确保它正在执行其任务,可能验证收件人(电子邮件地址)并可能将发送委托(delegate)给电子邮件类等。显然 SMS 消息会有所不同。

关于PHPUnit - 为接口(interface)编写测试类,并使用工厂测试对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8617371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com