繁体   English   中英

用Java类测试的测试类覆盖src clases

[英]Overriding src clases with test classes for java unit testing

我试图在测试时了解JUnit导入类的方式。
我注意到,创建一个与src类同名和相同包的模拟类将导致测试导入该类而不是真正的src类。
例如 :

src/main/java/MyObject.java
src/main/java/ObjectPrinter.java

src/test/java/MyObject.java
src/test/java/ObjectPrinterTest.java

main/java/MyObject.javatest/java/MyObject.java声明相同的程序包(两个文件均以相同的package XXX decleration开始)。 ObjectPrinter.java (在测试时由ObjectPrinterTest.java调用)将具有import XXX.MyObject

在测试时间内, import XXX.MyObject将如何导入test/java/MyObject.java而“生产”调用将调用src/java/MyObject.java呢?
这样的目录构建安全吗? 这是常见用法吗?
我在哪里可以了解有关此特定流程的更多信息?

谢谢!

这是Java依赖项如何工作的结果。 在运行JUnit测试时,将src / test / java目录用作要运行的项目,而将src / main / java视为依赖项。 当Java尝试解析导入路径时,它不知道该路径是来自内部文件还是依赖项。 因此,它将首先尝试在项目中解决它,然后查看依赖项。 如果在项目中找到匹配项,它将不再显示。 同样,在运行“生产”代码时,将src / main / java用作主项目,而与src / test / java无关,因此它将始终获得MyObject的原始实现。

以这种方式覆盖类在技术上是安全的,但不是一个好习惯。 不清楚是否使用原始实现。

如果要保留MyObject的大多数逻辑但要重写其中的一些逻辑,则应在src / test / java中创建一个存根类 ,即。 MyObjectStub。

替换逻辑逻辑进行测试的另一种方法是使用模拟库,例如Mockito

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM