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
Unit testing 单元测试,您是否应该对正在测试的类进行子类化?_Unit Testing - Fatal编程技术网

Unit testing 单元测试,您是否应该对正在测试的类进行子类化?

Unit testing 单元测试,您是否应该对正在测试的类进行子类化?,unit-testing,Unit Testing,我在工作和家里都开始做TDD,我知道我参加聚会迟到了。我已经对类的公共方法进行了一些测试。然而,我编写的许多类都有很多受保护的函数。在创建测试类时,我是否应该让它对要测试的类进行子类化,以便覆盖受保护的方法 谢谢 Jec欢迎您。派对永远不会太迟 创建子类以访问私有或受保护的方法可能是最好的方法。它会为您创建最大曲面来构造测试 在其他情况下,我创建了子类,允许我为测试中的类插入指令,向测试中的类添加工厂模式和单例模式,并帮助允许替换模拟对象。欢迎。派对永远不会太迟 创建子类以访问私有或受保护的方法

我在工作和家里都开始做TDD,我知道我参加聚会迟到了。我已经对类的公共方法进行了一些测试。然而,我编写的许多类都有很多受保护的函数。在创建测试类时,我是否应该让它对要测试的类进行子类化,以便覆盖受保护的方法

谢谢


Jec欢迎您。派对永远不会太迟

创建子类以访问私有或受保护的方法可能是最好的方法。它会为您创建最大曲面来构造测试


在其他情况下,我创建了子类,允许我为测试中的类插入指令,向测试中的类添加工厂模式和单例模式,并帮助允许替换模拟对象。

欢迎。派对永远不会太迟

创建子类以访问私有或受保护的方法可能是最好的方法。它会为您创建最大曲面来构造测试


在其他情况下,我创建了子类,以允许我对测试中的类进行指令插入,向测试中的类添加工厂模式和单例模式,并帮助允许替换模拟对象。

您可以对该类进行子类化,以测试其受保护的接口

或者您可以让模拟库进行子类化。根据受保护接口的功能,这可能更可取


具体来说,如果基类使用模板方法模式,则将子类创建为模拟可能更好。如果基类只为要使用的派生类提供帮助函数,请考虑将它们放到单独的类中并使它们公开。

< P>可以对类进行子类以测试其受保护的接口。

或者您可以让模拟库进行子类化。根据受保护接口的功能,这可能更可取


具体来说,如果基类使用模板方法模式,则将子类创建为模拟可能更好。如果基类只为要使用的派生类提供帮助函数,请考虑将它们放到单独的类中并使它们公开。

您应该测试类的公共接口。 所以您不需要为私有或受保护的成员编写单元测试


您的私有和受保护成员在公共成员内部被调用,因此当您测试您的公共成员时,所有私有和受保护成员也将被隐式测试。

您应该测试类的公共接口。 所以您不需要为私有或受保护的成员编写单元测试


您的私有成员和受保护成员在公共成员内部被调用,因此当您测试您的公共成员时,所有私有成员和受保护成员都将被隐式测试。

在理想情况下,您不需要直接测试受保护的方法,而只需要通过公共接口进行测试。然而,这个世界当然并不理想,如果有充分的理由,我认为测试受保护的方法并不是一件坏事

我认为是否划分子类取决于受保护方法的性质:

如果它们是抽象的或空白的方法,设计用于被子类重写,并且您希望测试这些方法是否正在被调用,那么测试子类是一种很好的方法,因为您可以使用子类来拦截这些方法调用并验证它们是如何被调用的,等等。我要说的一件事是要小心,测试子类中的任何逻辑纯粹是为了验证方法调用,否则您可能会引入可能会对您的测试产生负面影响的行为,例如,您可以很容易地将逻辑添加到测试子类中,从而使给定的测试仅基于测试子类中的逻辑而不是实际实现中的逻辑通过

如果它们是设计用于向子类公开功能的类中的方法,那么我认为您不需要对被测试的类进行子类化。因为这些方法是受保护的范围,同一个包中的不同类可以访问它们,因此您所需要做的就是让您的测试在同一个包中调用这些方法来测试它们。在我的书中,这通常是一个很好的实践,测试应该在同一个包中,但存储在不同的目录中


在理想情况下,您不需要直接测试受保护的方法,而只需要通过公共接口进行测试。然而,这个世界当然并不理想,如果有充分的理由,我认为测试受保护的方法并不是一件坏事

我认为是否划分子类取决于受保护方法的性质:

如果它们是抽象的或空白的方法,设计为被子类重写,并且您希望测试这些方法是否正在被调用,那么测试子类是一种很好的方法,因为您可以使用子类作为截取方法 这些方法调用并验证它们是如何被调用的等等。我要说的一件事是要小心,测试子类中的任何逻辑纯粹是为了验证方法调用,否则您可能会引入可能会对测试产生负面影响的行为,例如,您可以很容易地将逻辑添加到测试子类中,从而使给定的测试仅基于测试子类中的逻辑而不是实际实现中的逻辑通过

如果它们是设计用于向子类公开功能的类中的方法,那么我认为您不需要对被测试的类进行子类化。因为这些方法是受保护的范围,同一个包中的不同类可以访问它们,因此您所需要做的就是让您的测试在同一个包中调用这些方法来测试它们。在我的书中,这通常是一个很好的实践,测试应该在同一个包中,但存储在不同的目录中


许多人认为,您应该只测试类的公共方法

子类化适用于受保护的属性和方法,但不适用于私有、内部等


根据您使用的语言,您可以将测试类及其测试的类声明为好友,以便测试类可以查看其他类的属性。

许多人认为您应该只测试类的公共方法

子类化适用于受保护的属性和方法,但不适用于私有、内部等


根据您使用的语言,您可以将测试类及其测试的类声明为好友,以便测试类可以查看其他类的属性。

欢迎参加聚会,欢迎大家!你能详细说明一下你想测试的受保护方法的用途吗?它们是为了向子类公开功能,还是为了被子类重写而设计的抽象方法/空白方法?大多数受保护方法都会公开功能。如果一个类有很多受保护的函数,那么也许你应该在单一责任原则的背景下重新考虑你的设计。欢迎参加聚会,邀请大家!你能详细说明一下你想测试的受保护方法的用途吗?它们是为了向子类公开功能,还是为了被子类重写而设计的抽象方法/空白方法?大多数受保护方法都会公开功能。如果一个类有很多受保护的函数,那么也许你应该在单一责任原则的背景下重新考虑你的设计。是的,我不是很清楚。受保护的函数大多是大多数子类可能需要使用的常见代码。谢谢你的回答。没问题,回答聪明的问题总是一件愉快的事。享受你进入TDD的机会。是的,我不是很清楚。受保护的函数大多是大多数子类可能需要使用的常见代码。谢谢你的回答。没问题,回答聪明的问题总是一件愉快的事。享受你进入TDD的机会。