0

一連の統合テストを行うプロジェクトに取り組んでいます。これらのテストの 1 つは、サード パーティ ベンダーに対して多くのネットワーク呼び出しを行ったクラスを自動配線しました。テストでこれらの呼び出しを行いたくなかったため、チームは 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 に自動配線されます。

ただし、最近、同じパッケージに別のサービスの新しいモックを追加しましたが、ロードできません。エラーが発生します:

クラスパスリソース [mock-beans.xml] で定義された「addressService」という名前の Bean のクラス [tst.mycompany.mocks.MockAdressService] が見つかりません。ネストされた例外は 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 フォルダーを確認したところ、コンパイルされたクラスがそこにあります。

4

1 に答える 1

0

恥ずかしいのですが、mock-beans.xml の Bean 定義にタイプミスがありました: MockAdressService は MockAddressService にする必要があります (「d」がありません)

于 2016-04-06T16:21:41.710 に答える