[英]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.java
和test/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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.