{"id":1083,"date":"2019-09-10T01:45:54","date_gmt":"2019-09-09T16:45:54","guid":{"rendered":"https:\/\/ito-u-oti.com\/?p=1083"},"modified":"2019-09-10T01:45:59","modified_gmt":"2019-09-09T16:45:59","slug":"post-1083","status":"publish","type":"post","link":"https:\/\/ito-u-oti.com\/?p=1083","title":{"rendered":"\u3010RepositoryTest\u3011\u5f15\u6570\u306eSideEffect\u306e\u30c6\u30b9\u30c8\u5b9f\u88c5"},"content":{"rendered":"\n<h2 id=\"outline__1\" class=\"wp-block-heading\">SideEffect\u3068\u306f<\/h2>\n\n\n\n<p>SideEffect\uff08\u526f\u4f5c\u7528\uff09\u3068\u306f\u3001<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306b\u304a\u3051\u308b\u526f\u4f5c\u7528\uff08\u3075\u304f\u3055\u3088\u3046\uff09\u3068\u306f\u3001\u3042\u308b\u6a5f\u80fd\u304c\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306e(\u8ad6\u7406\u7684\u306a)\u72b6\u614b\u3092\u5909\u5316\u3055\u305b\u3001\u305d\u308c\u4ee5\u964d\u3067\u5f97\u3089\u308c\u308b\u7d50\u679c\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u3053\u3068\u3092\u3044\u3046\u3002\u4ee3\u8868\u7684\u306a\u4f8b\u306f\u5909\u6570\u3078\u306e\u5024\u306e\u4ee3\u5165\u3067\u3042\u308b\u3002<\/p><cite><a href=\"https:\/\/ja.wikipedia.org\/wiki\/%E5%89%AF%E4%BD%9C%E7%94%A8_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0)\">wikipedia<\/a><\/cite><\/blockquote>\n\n\n\n<p>\u4eca\u56de\u306e\u4f8b\u3060\u3068\u4e0a\u8a18\u306e\u8aac\u660e\u3068\u306f\u5fae\u5999\u306b\u9055\u3046\u306e\u3067\u3059\u304c\u3001<br>\u30e1\u30bd\u30c3\u30c9\u306e\u5f15\u6570\u306b\u5165\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u3001\u305d\u306e\u30e1\u30bd\u30c3\u30c9\u5b9f\u884c\u5f8c\u306b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u5185\u306e\u5024\u304c\u5909\u5316\u3059\u308b\u3053\u3068\u3092\u6307\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u5177\u4f53\u7684\u306b\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 id=\"outline__2\" class=\"wp-block-heading\">Repository\u306b\u3088\u308bSideEffect\u306e\u4f8b<\/h2>\n\n\n\n<p>Repository\u5c64\u306b\u304a\u3044\u3066\u3001\u30c7\u30fc\u30bf\u3092INSERT\u3059\u308b\u4e0b\u8a18\u306e\u30e1\u30bd\u30c3\u30c9\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n int create(Address address);\n<\/pre><\/div>\n\n\n<p>Address\u30c6\u30fc\u30d6\u30eb\u306baddress\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30fc\u30bf\u3092INSERT\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u3067\u3001<br>\u623b\u308a\u5024\u306fINSERT\u306b\u6210\u529f\u3057\u305f\u4ef6\u6570\u304c\u8fd4\u3063\u3066\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"has-text-color has-vivid-red-color\">\u305d\u3057\u3066\u3001Address\u30c6\u30fc\u30d6\u30eb\u306e\u4e3b\u30ad\u30fc\u306b\u76f8\u5f53\u3059\u308baddressId\u4ee5\u5916\u3092INSERT\u3057\u3001<br>addressId\u306fDB\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u6a5f\u80fd\u304b\u3089\u53d6\u5f97\u3055\u308c\u3001\u30e1\u30bd\u30c3\u30c9\u5b9f\u884c\u5f8c\u306b\u5f15\u6570\u306eaddress\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306eaddressId\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Address\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u751f\u6210\u3059\u308b\uff08addressId\u3060\u3051\u8a2d\u5b9a\u3057\u3066\u3044\u306a\u3044\uff09<\/li><li>create\u30e1\u30bd\u30c3\u30c9\u306e\u5f15\u6570\u306bAddress\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6e21\u3059<\/li><li>\u30e1\u30bd\u30c3\u30c9\u306e\u5b9f\u884c\u7d50\u679c\u304c\u623b\u308a\u5024\u3068\u3057\u3066\u8fd4\u3063\u3066\u304f\u308b<\/li><li>Address\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306eaddresId\u306bDB\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u6a5f\u80fd\u304b\u3089\u53d6\u5f97\u3057\u305f\u5024\u304c\u683c\u7d0d\u3055\u308c\u308b<\/li><\/ol>\n\n\n\n<h2 id=\"outline__3\" class=\"wp-block-heading\">\u30c6\u30b9\u30c8<\/h2>\n\n\n\n<p>\u3053\u306eRepository\u30e1\u30bd\u30c3\u30c9\u306e\u5b9f\u88c5\u304c\u4e0b\u8a18\u3060\u3068\u3057\u3066\u3001<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n@Repository\n@RequiredArgsConstructor\npublic class AddressRepositoryImpl implements AddressRepository {\n\n    private final AddressMapper addressMapper;\n\n    public int create(Address address) {\n        return addressMapper.create(address);\n    }\n}\n<\/pre><\/div>\n\n\n<p>DB\u306b\u76f4\u63a5\u30a2\u30af\u30bb\u30b9\u3057\u3066\u3044\u308bMapper\u3092Mock\u5316\u3057\u3001<br>Repository\u306e\u5358\u4f53\u30c6\u30b9\u30c8\u3092\u884c\u3046\u3068\u3059\u308b\u3068\u307e\u305a\u3053\u3046\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 id=\"outline__3_1\" class=\"wp-block-heading\">\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\uff11<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n @Test\n void createTest() {\n\n        \/\/GIVEN\n        Address address = Address.builder()\n                .address(&quot;Tokyo&quot;)\n                .district(&quot;&quot;)\n                .city(City.builder().cityId(90).build())\n                .phone(&quot;000-1111-2222&quot;)\n                .lastUpdate(Timestamp.valueOf(LocalDateTime.of(2019, 9, 9, 12, 12)))\n                .build();\n\n        when(addressMapper.create(any())).thenReturn(1);\n\n        \/\/WHEN\n        int actual = addressRepository.create(address);\n\n        \/\/THEN\n        assertThat(actual).isEqualTo(1);\n }\n<\/pre><\/div>\n\n\n<p>Mapper\u306eMock\u3067\u6b63\u5e38\u306bINSERT\u3055\u308c\u305f\u3068\u3044\u3046\u4ef6\u6570\u3092\u8fd4\u3057\u3066\u305d\u308c\u3092\u691c\u8a3c\u3057\u3066\u3044\u307e\u3059\u304c\u3001<br>SideEffect\u306b\u3088\u308b\u5f71\u97ff\u306f\u691c\u8a3c\u3067\u304d\u3066\u3044\u307e\u305b\u3093\u3002<br>Mock\u3067SideEffect\u3092\u518d\u73fe\u3059\u308b\u65b9\u6cd5\u306f\u6b21\u306e\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 id=\"outline__3_2\" class=\"wp-block-heading\">\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\uff12<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n  @Test\n  void createSideEffectTest() {\n\n        \/\/GIVEN\n        Address address = Address.builder()\n                .address(&quot;Tokyo&quot;)\n                .district(&quot;&quot;)\n                .city(City.builder().cityId(90).build())\n                .phone(&quot;000-1111-2222&quot;)\n                .lastUpdate(Timestamp.valueOf(LocalDateTime.of(2019, 9, 9, 12, 12)))\n                .build();\n\n        when(addressMapper.create(any())).then(firstArgumentsSideEffect());\n\n        \/\/WHEN\n        assertThat(address.getAddressId()).isEqualTo(0);\n        int actual = addressRepository.create(address);\n\n        \/\/THEN\n        assertThat(actual).isEqualTo(1);\n        assertThat(address.getAddressId()).isEqualTo(1110);\n  }\n\n  private Answer&lt;Integer&gt; firstArgumentsSideEffect() {\n        return invocation -&gt; {\n            Object&#x5B;] args = invocation.getArguments();\n            Address arg = (Address) args&#x5B;0];\n            arg.setAddressId(1110);\n            return 1;\n        };\n  }\n<\/pre><\/div>\n\n\n<p>mock\u6642\u306bthenReturn\u3067\u306f\u306a\u304fthen\u3092\u4f7f\u7528\u3057\u3001<br>\u5185\u90e8\u3067Address\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u64cd\u4f5c\u3057\u3066\u3044\u307e\u3059\u3002<br>return\u30671\u3092\u8fd4\u3057\u3066\u3044\u308b\u306e\u304c\u30e1\u30bd\u30c3\u30c9\u306e\u623b\u308a\u5024\u306b\u76f8\u5f53\u3057\u307e\u3059\u3002<br>\u5f15\u6570\u304c\u4e8c\u3064\u3042\u308b\u5834\u5408\u306fargs[1]\u3092\u64cd\u4f5c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 id=\"outline__4\" class=\"wp-block-heading\">\u307e\u3068\u3081<\/h2>\n\n\n\n<p>SideEffect\u306f\u30b3\u30fc\u30c9\u304c\u8907\u96d1\u306b\u306a\u308a\u3001\u53ef\u8aad\u6027\u304c\u60aa\u304f\u306a\u308b\u306e\u3067\u3084\u3081\u305f\u307b\u3046\u304c\u3044\u3044\u306e\u3067\u3059\u304c\u3001<br>DB\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u6a5f\u80fd\u304b\u3089\u751f\u6210\u3055\u308c\u305f\u5024\u3092\u4f7f\u7528\u3059\u308b\u3068\u3044\u3046\u3088\u3046\u306a\u6642\u306f\u4f7f\u308f\u3056\u308b\u3092\u5f97\u307e\u305b\u3093\u3002\uff08\u5c11\u306a\u304f\u3068\u3082mybatis\u306e\u5834\u5408\u306f\u4f7f\u308f\u3056\u308b\u3092\u5f97\u306a\u3044\uff09<\/p>\n\n\n\n<p>\u3042\u3068\u3001\u300c\u526f\u4f5c\u7528\u300d\u3058\u3083\u306a\u304f\u3066\u300cSideEffect\u300d\u3063\u3066\u8a00\u3046\u306e\u304c\u30b9\u30bf\u30a4\u30ea\u30c3\u30b7\u30e5\u3067\u304b\u3063\u3053\u3044\u3044\u3067\u3059\u3002<br>\u662f\u975e\u4f7f\u3063\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<br>\u203b\u52dd\u624b\u306b\u540d\u4ed8\u3051\u305f\u308f\u3051\u3067\u306f\u306a\u3044\u3067\u3059\uff08\u7b11\uff09<\/p>\n\n\n\n<h2 id=\"outline__5\" class=\"wp-block-heading\">\u53c2\u8003<\/h2>\n\n\n\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/41147835\/stubbing-a-void-method-in-mockito-with-side-effects\/41157850#41157850\">Stubbing a void method in mockito with side effects<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>SideEffect\u3068\u306f SideEffect\uff08\u526f\u4f5c\u7528\uff09\u3068\u306f\u3001 \u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306b\u304a\u3051\u308b\u526f\u4f5c\u7528\uff08\u3075\u304f\u3055 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":257,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40,6],"tags":[233,257,232,256],"class_list":["post-1083","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-repository-test","category-programing","tag-repository","tag-side-effects","tag-test","tag-256"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=\/wp\/v2\/posts\/1083","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1083"}],"version-history":[{"count":2,"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=\/wp\/v2\/posts\/1083\/revisions"}],"predecessor-version":[{"id":1085,"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=\/wp\/v2\/posts\/1083\/revisions\/1085"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=\/wp\/v2\/media\/257"}],"wp:attachment":[{"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1083"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1083"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1083"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}