解决Maven项目的Test.class类中无法使用@Test注解的问题
目录@Test注释不能在Maven的Test.class类中使用。 异常后台异常信息异常分析解决方案。 Maven项目找不到@的作用域scope。 传递以下依赖项
Maven的Test.class类中不能使用@Test注解
异常背景
在一个maven web项目中,我想编写一个简单的测试类,所以我创建了一个类Test.class
我在这个类中写了@Test注解方法,发现无法导入包。 手动 org.junit.Test; 导入也无效。
异常信息
异常分析
我的第一直觉是 pom.xml 中没有配置坐标。 我看了一下,发现已经配置好了。
再次重建maven,发现还是不行。
然后重新创建另一个测试类,发现可以正常使用。
也就是说,创建的测试类的名称不能使用Test。 我猜可能的原因是注释和类具有相同的名称。
解决方案
只需删除这个Test.class测试类并更改其名称即可。
Maven项目找不到@Test
今天在IDEA下搭建maven进行单元测试时,在非test文件下写了一个测试类,发现找不到@Test注解,但是发现根路径下有junit jar包。 挺郁闷的,然后我去查看自己的代码,发现maven依赖中,junit的作用域是test,如图1,果断将测试类放在test文件下,问题就解决了。
当然,如果将范围改为 ,则测试类不必放在测试文件下,也可以放在主文件下。
图1
进一步观察发现问题发生在maven依赖范围内。 经过查阅资料,我们发现
maven的范围如下
1、测试范围是指有效的测试范围,编译打包时不会用到这个依赖。
堆范围是指有效的编译范围,编译和打包过程中会存储依赖关系。
3.依赖:在编译和测试范围内有效,最终生成war时不会添加。 例如:-api,如图2所示,因为-api等已经存在于web服务器中,如果打包会冲突。
图二
4.运行时依赖,但编译时不依赖。
默认依赖范围是
这进一步扩展了测试的传递依赖。 参考了别人的博客,如下:
依赖关系的转换
作用域为 test 的包不会传递给引用该项目的其他项目,但如果不是 test,依赖关系就会传递给其他项目。
例如:项目A中有一个依赖包.10,其范围为test
现在有一个项目B,它引用了项目A。如果项目B想要使用.10,它必须自己重新定义依赖关系。 【因为依赖不会被传递,所以不会从A项目中获取]
但是:如果范围是其他的,则不测试
那么 B就可以直接使用,不需要自己定义依赖。 【因为依赖会自动从A项目中传递,获得】
以上是我的个人经验,希望可以给您参考,也希望您支持我们。