Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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
Java 为什么;新";构造函数/字段中的关键字对于单元测试不灵活?_Java_Unit Testing - Fatal编程技术网

Java 为什么;新";构造函数/字段中的关键字对于单元测试不灵活?

Java 为什么;新";构造函数/字段中的关键字对于单元测试不灵活?,java,unit-testing,Java,Unit Testing,我一直在遵循Guice的一些指导原则,它提到您永远不应该在构造函数或字段中使用new,因为它是不灵活的设计,会妨碍正确的单元测试 这是什么意思 还有一个问题,如果我的函数读取一个XML文件并对其进行解析,那么它是一个单元测试的范围,以尝试捕获所有可能的错误输入值?在UI中,我们不为输入验证编写单元测试。从不太苛刻了。通常,这可能是一个更合适的说法 要点是:为了进行适当的单元测试,您有时必须控制“测试中的类”正在使用的对象。当通过调用new()初始化相应字段时。。。那么你就无法控制这个领域了。(好

我一直在遵循Guice的一些指导原则,它提到您永远不应该在构造函数或字段中使用
new
,因为它是不灵活的设计,会妨碍正确的单元测试

这是什么意思


还有一个问题,如果我的函数读取一个XML文件并对其进行解析,那么它是一个单元测试的范围,以尝试捕获所有可能的错误输入值?在UI中,我们不为输入验证编写单元测试。

从不太苛刻了。通常,这可能是一个更合适的说法

要点是:为了进行适当的单元测试,您有时必须控制“测试中的类”正在使用的对象。当通过调用
new()
初始化相应字段时。。。那么你就无法控制这个领域了。(好吧,你可以使用字节码操纵工具,比如PowerMock,来实现这一点;但特别是在编写你自己的代码时:那么你绝对不会使用PowerMock;使用它表明你放弃了一个糟糕的设计。句号)

然而,当您使用依赖注入时,单元测试可以将该字段的模拟对象传递到被测试的类中

但是请注意:这不仅仅是关于“适当的单元测试”。在A)初始化业务逻辑和B)执行其“业务”的业务逻辑之间有一个本质的区别。这是两种不同的责任,当您不清楚这种分离时,您的产品就更难维护和改进

了解这个主题的一个很好的起点是这些。每一分钟都是值得的

编辑:你的评论/问题太离谱了;还有很多现存的材料(比如,或者)。但这里有一句话:合理单元测试的本质是。。。将您的业务逻辑划分为小的、可测试的单元

我的意思是:当你把很多代码放进一个可以做5件不同事情的类中时,编写好的单元测试是很难的。取而代之的是:为一项责任创建一个单位。在您的上下文中:可能有一个类用于读取XML数据。该类处理XML,并返回不再是XML的内容。然后您有另一个
类,该类处理第一个类创建的输出

关于第二个问题:这取决于XML的来源。换句话说:您的产品代码必须能够检测所有类型的不良XML输入。因为您希望您的生产代码能够正确地处理可能提供给它的所有输入。因此,单元测试的目标是确保所进行的所有验证实际上都在工作。验证XML不是测试代码的工作!单元测试验证您的代码是否满足其契约

现在,您的单元测试将重点放在这一点上:一些测试确保这种XML读取/转换工作正常;其他测试(对XML一无所知)确保进一步的处理工作正常


但正如所说;这确实是一个非常广泛的话题,你不应该期望一个简单的答案能告诉你所有你需要做的事情。这个主题需要花费数月的时间研究各种资源,并且。。。练习,练习,练习…

永远不要太苛刻了。通常,这可能是一个更合适的说法

要点是:为了进行适当的单元测试,您有时必须控制“测试中的类”正在使用的对象。当通过调用
new()
初始化相应字段时。。。那么你就无法控制这个领域了。(好吧,你可以使用字节码操纵工具,比如PowerMock,来实现这一点;但特别是在编写你自己的代码时:那么你绝对不会使用PowerMock;使用它表明你放弃了一个糟糕的设计。句号)

然而,当您使用依赖注入时,单元测试可以将该字段的模拟对象传递到被测试的类中

但是请注意:这不仅仅是关于“适当的单元测试”。在A)初始化业务逻辑和B)执行其“业务”的业务逻辑之间有一个本质的区别。这是两种不同的责任,当您不清楚这种分离时,您的产品就更难维护和改进

了解这个主题的一个很好的起点是这些。每一分钟都是值得的

编辑:你的评论/问题太离谱了;还有很多现存的材料(比如,或者)。但这里有一句话:合理单元测试的本质是。。。将您的业务逻辑划分为小的、可测试的单元

我的意思是:当你把很多代码放进一个可以做5件不同事情的类中时,编写好的单元测试是很难的。取而代之的是:为一项责任创建一个单位。在您的上下文中:可能有一个类用于读取XML数据。该类处理XML,并返回不再是XML的内容。然后您有另一个
类,该类处理第一个类创建的输出

关于第二个问题:这取决于XML的来源。换句话说:您的产品代码必须能够检测所有类型的不良XML输入。因为您希望您的生产代码能够正确地处理可能提供给它的所有输入。因此,单元测试的目标是确保所有验证