私はモックを使って単体テストしようとしています。ここでの方法である:マップをスタブしようとしたときにエラーが発生しました
{...
mapMasterMap = this.sysAdminService.getMasterData();
final Map<String, MasterVO> codeMap = (Map<String, MasterVO>) mapMasterMap
.get("mvo");
final Map<String, String> sessionMap = (Map<String, String>) mapMasterMap
.get("smap");
dataVO.setSessionMap(sessionMap);
dataVO.setVO1(codeMap.get("vo1"));
dataVO.setVO2(codeMap.get("vo2"));
sCommand.setDataVO(dataVO);
} catch (final Exception e) {
return mav;
}
return mav;
}
そして、何私はmapMasterMapが有効なマップが含まれています(とcodeMap.getsが爆破していない)ように、第一のラインスタブされてやろうとしています - のような:
{
@Mock
private MasterVO masterVO;
@Mock
private SysAdminService sysAdminService;
@InjectMocks
private SysAdminController sysAdminController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(this.sysAdminService.getMasterData())
.thenReturn(new HashMap<String, MasterVO>() {{
this.put("mvo",this.masterVO);
}};
}
@Test
public final void testType(){}
私はエラーを取得しています:
だから、The method
thenReturn(Map<String,Object>)
in the typeOngoingStubbing<Map<String,Object>>
is not applicable for the arguments (new HashMap<String,MasterVO>(){}
)
、まず - 私は正しいアプローチを以下のよ? 「はい」の場合、これをどのように修正できますか?
まず、[二重ブレースパターン]を使用しないでください(https://blog.jooq.org/2014/12/08/dont-be-clever-the-double-curly-braces-anti-パターン/) - それは他の問題の中でもメモリリークの原因です。 [Guavaの 'ImmutableMap'](https://github.com/google/guava/wiki/ImmutableCollectionsExplained)は、' Map'をインラインで構築したいときに流暢なビルダーパターンを持っています。 – dimo414
また、あなたのメソッドの一部だけを含めたのはなぜですか?メソッドのシグネチャは何ですか? 'mav'はどんなタイプですか? 'まあまあ'とは何ですか?コンパイルの問題がある場合は、コンパイルしようとしている実際のコードを共有することは、有用なガイダンスを得るための最初のステップです。 – dimo414
mavはModelAndViewです - 私は残りの部分を削除しました。なぜなら、それらは質問に無関係だったからです。 – user2666282