2

このオートワイヤーを使用して多くの春のサービスがあります。

@Autowired
private SmartCardService smartCardService;

テスト用のダミー クラスが必要で、元のクラスを拡張するこのクラスを定義しました。

@Service
public class DummySmartCardService extends SmartCardService{
    ...
}

すべての Autowired アノテーションを変更せずに、すべての autowire が元のサービスではなくダミーを取得することを確認するにはどうすればよいですか?

ありがとう。

4

4 に答える 4

4

@Primary アノテーションの使用を検討してください。こちらをご覧ください

于 2013-07-15T09:15:19.133 に答える
1

@Resource アノテーションまたは @Qualifier を、Bean タイプを識別する @Qualifier とともに使用します。

@Autowired
@Qualifier("testing")
private SmartCardService smartCardService;

@Service
@Qualifier("testing")
public class DummySmartCardService extends SmartCardService{
    ...
}

または、名前によるセマンティクスを使用する @Resource を使用します。

@Resource("dummySmartCardService")
private SmartCardService smartCardService;


@Service("dummySmartCardService")
public class DummySmartCardService extends SmartCardService{
    ...
}

理論的には使用できます@Qualifier("beanName")が、推奨されません。

ただし、Spring プロファイルを使用して、テストに関連するスタブのみをテストにロードする方が良いと思います。

@Service
@Profile("test")
public class DummySmartCardService extends SmartCardService{
    ...
}

@ContextConfiguration(locations = {"classpath:services.xml"})    
@ActiveProfiles("test")
public class TestSuite{
    @Autowired
    private SmartCardService smartCardService;
}
于 2013-07-15T09:17:18.923 に答える
0

私見では、Spring Bean を適切かつ簡単にモックするために、 Springockioを確認する必要があります。

この方法で、Bean をモックに置き換えるか、Spy でラップできます。

@ContextConfiguration(loader = SpringockitoContextLoader.class,
locations = "classpath:/context.xml")
public class SpringockitoAnnotationsMocksIntegrationTest extends 
                                AbstractJUnit4SpringContextTests {

    @ReplaceWithMock
    @Autowired
    private InnerBean innerBean;

    @WrapWithSpy
    @Autowired
    private AnotherInnerBean anotherInnerBean;
    ....
}

これはクリーンな方法であるだけでなく (修飾子やプロファイルを追加してテスト対象のコードを変更する必要はありません)、 Mockitoの機能を使用してモック、検証、スパイを行うこともできます。

于 2013-07-15T17:53:22.277 に答える