我正在进入一个集成测试套件的项目。其中一个测试自动安装了一个类,该类对第三方供应商进行了大量网络调用。因为我们不希望我们的测试进行这些调用,所以团队通过testApplicationContext.xml Spring配置文件模拟了这个客户端。
集成测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/testApplicationContext.xml")
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true)
@Transactional
public class IntegrationTest {
testApplication.xml的定义:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/cache/spring-cache.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.1.xsd">
<aop:aspectj-autoproxy />
<context:component-scan base-package="com.mycompany" />
<context:component-scan base-package="tst.mycompany.mocks"/>
<import resource="mock-beans.xml"/>
mock-beans.xml的定义:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"...>
<!-- Override bean definitions with mocks -->
<bean id="thirdPartyClientService" class="tst.mycompany.mocks.MockThirdPartyClient" />
</beans>
这在我们的设置中工作正常,并且当作为测试运行时,MockThirdPartyClient的实例会自动连接到我们的spring bean中。
但是,我最近在同一个软件包中添加了另一个服务的新模拟,但无法加载它。我收到错误:
找不到名为&#39; addressService&#39;的bean的类[tst.mycompany.mocks.MockAdressService]在类路径资源[mock-beans.xml]中定义;嵌套异常是java.lang.ClassNotFoundException:tst.mycompany.mocks.MockAdressService
这是更新的 mock-beans.xml :
<beans xmlns="http://www.springframework.org/schema/beans">
<!-- Override bean definitions with mocks -->
<bean id="thirdPartyClientService" class="tst.mycompany.mocks.MockThirdPartyClient" />
<bean id="addressService" class="tst.mycompany.mocks.MockAdressService" />
</beans>
以下是我如何自动启动有效的初始依赖关系:
@Autowired ThirdPartyClientServiceI client;
和那个没有的人:
@Autowired AddressServiceI addressService;
我已经仔细检查了所有内容的拼写,并且所有内容都排成一列,所以这很疯狂,这是不行的。我想也许这是一个被错误缓存的事情...但我刷新并清理了一切,但仍然没有骰子。
这些模拟都没有注释FWIW,它们只是实现了他们设计用来模拟的服务接口。它们都位于src/test/java
文件夹下。
package tst.mycompany.mocks;
public class MockAddressService implements AddressServiceI {
有问题的堆栈跟踪:
Caused by: java.lang.ClassNotFoundException: tst.mycompany.mocks.MockAdressService
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_71]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_71]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[?:1.8.0_71]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_71]
at org.springframework.util.ClassUtils.forName(ClassUtils.java:250) ~[spring-core-4.2.2.RELEASE.jar:4.2.2.RELEASE]
我确实检查了bin文件夹,编译后的类就在那里。
答案 0 :(得分:0)
这很令人尴尬,但我在mock-beans.xml中的bean定义中输入了一个拼写错误: MockAdressService应该是MockAddressService(缺少'd')