{"id":1200,"date":"2020-07-04T19:59:25","date_gmt":"2020-07-04T10:59:25","guid":{"rendered":"https:\/\/ito-u-oti.com\/?p=1200"},"modified":"2020-07-04T19:59:28","modified_gmt":"2020-07-04T10:59:28","slug":"post-1200","status":"publish","type":"post","link":"https:\/\/ito-u-oti.com\/?p=1200","title":{"rendered":"\u3010Java\u3011\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u5024\u3092\u6bd4\u8f03\u3059\u308b\u30c6\u30b9\u30c8"},"content":{"rendered":"\n<p>\u540c\u3058\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c2\u3064\u3042\u308b\u6642\u306b\u3001\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u542b\u3081\u3066\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u540c\u3058\u5024\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u691c\u8a3c\u3059\u308b\u8a71\u3002<\/p>\n\n\n\n<h2 id=\"outline__1\" class=\"wp-block-heading\">lombok\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3067equals\u3092override<\/h2>\n\n\n\n<p>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u5185\u306b\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4e00\u3064\u4e00\u3064\u691c\u8a3c\u3059\u308b\u3088\u3046\u306a\u30e1\u30bd\u30c3\u30c9\u3092\u4f5c\u3089\u306a\u304f\u3066\u3082\u3001lombok\u306e<code>@Data<\/code>\u304b<code>@EqualsAndHashCode<\/code>\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067equals\u30e1\u30bd\u30c3\u30c9\u304coverride\u3055\u308c\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u5024\u307e\u3067\u540c\u3058\u304b\u691c\u8a3c\u3057\u3066\u304f\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002lombok\u4fbf\u5229\u3002<\/p>\n\n\n\n<h3 id=\"outline__1_1\" class=\"wp-block-heading\">Address.java<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n@Builder\n@Data\npublic class Address {\n    private int addressId;\n    private String address;\n    private String address2;\n    private String district;\n    private City city;\n    private String postalCode;\n    private String phone;\n    private Timestamp lastUpdate;\n}\n<\/pre><\/div>\n\n\n<h3 id=\"outline__1_2\" class=\"wp-block-heading\">AddressTests.java<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n    @Test\n    void testPattern1() {\n        Address base = Address.builder().addressId(1).build();\n        Address target = Address.builder().addressId(1).build();\n        boolean actual = base.equals(target);\n        assertThat(actual).isTrue();\n       \n        base = Address.builder().addressId(1).build();\n        target = Address.builder().addressId(5).build();\n        actual = base.equals(target);\n        assertThat(actual).isFalse();\n    }\n<\/pre><\/div>\n\n\n<h3 id=\"outline__1_3\" class=\"wp-block-heading\">lombok\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u30cd\u30b9\u30c8\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u307e\u3067\u691c\u8a3c\u3059\u308b<\/h3>\n\n\n\n<p>\u3082\u3057\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4e2d\u306b\u30cd\u30b9\u30c8\u3057\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u3001lombok\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3067override\u3055\u308c\u305fequals\u30e1\u30bd\u30c3\u30c9\u306f\u30cd\u30b9\u30c8\u5148\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u3082\u5024\u691c\u8a3c\u306e\u5bfe\u8c61\u306b\u3057\u3066\u304f\u308c\u308b\u3002<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n    @Test\n    void testPattern1() {\n\n        \/\/ AssertionFailedError:\n        \/\/ Expecting:&lt;false&gt; to be equal to:&lt;true&gt; but was not.\n        \/\/ \u30cd\u30b9\u30c8\u3057\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5024\u304c\u9055\u3046\u305f\u3081\n        Address base = Address.builder().addressId(1).city(City.builder().build()).build();\n        Address target = Address.builder().addressId(1).city(City.builder().city(&quot;Tokyo&quot;).build()).build();\n        actual = base.equals(target);\n        assertThat(actual).isTrue();\n    }\n<\/pre><\/div>\n\n\n<p>\u3068\u3044\u3046\u3088\u3046\u306b\u3068\u3066\u3082\u4fbf\u5229\u306alombok\u3060\u304c\u3001\u5834\u5408\u306b\u3088\u3063\u3066\u306f\u30cd\u30b9\u30c8\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u6bd4\u8f03\u306f\u3057\u305f\u304f\u306a\u3044\u5834\u5408\u304c\u3042\u308b\u3002<br>\u203bsuperClass\u306e\u6bd4\u8f03\u662f\u975e\u306f<code>callSuper<\/code>\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u5909\u3048\u3089\u308c\u308b\u3002<\/p>\n\n\n\n<p>\u305d\u306e\u5834\u5408\u306f\u81ea\u5206\u3067\u30e1\u30bd\u30c3\u30c9\u3092\u4f5c\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u3002<\/p>\n\n\n\n<h2 id=\"outline__2\" class=\"wp-block-heading\">\u81ea\u4f5c\u3057\u305f\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c\u7528\u306e\u30e1\u30bd\u30c3\u30c9<\/h2>\n\n\n\n<h3 id=\"outline__1_1\" class=\"wp-block-heading\">Address.java<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n@Builder\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\npublic class Address {\n\n    private int addressId;\n    private String address;\n    private String address2;\n    private String district;\n    private City city;\n    private String postalCode;\n    private String phone;\n    private Timestamp lastUpdate;\n\n    public boolean isEqualEntity(Address target) {\n        if (!Objects.equals(getAddressId(), target.getAddressId())) { return false; }\n        if (!Objects.equals(getAddress(), target.getAddress())) { return false; }\n        if (!Objects.equals(getAddress2(), target.getAddress2())) { return false; }\n        if (!Objects.equals(getDistrict(), target.getDistrict())) { return false; }\n        if (!Objects.equals(getPostalCode(), target.getPostalCode())) { return false; }\n        if (!Objects.equals(getPhone(), target.getPhone())) { return false; }\n        return Objects.equals(getLastUpdate(), target.getLastUpdate());\n    }\n}\n<\/pre><\/div>\n\n\n<h3 id=\"outline__1_2\" class=\"wp-block-heading\">AddressTests.java<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n    @Test\n    void testPattern1() {\n        Address base = Address.builder().addressId(1).build();\n        Address target = Address.builder().addressId(1).build();\n        boolean actual = base.equals(target);\n        assertThat(actual).isTrue();\n\n        base = Address.builder().addressId(1).build();\n        target = Address.builder().addressId(5).build();\n        actual = base.equals(target);\n        assertThat(actual).isFalse();\n\n        \/\/ success\n        base = Address.builder().addressId(1).city(City.builder().build()).build();\n        target = Address.builder().addressId(1).city(City.builder().city(&quot;Tokyo&quot;).build()).build();\n        actual = base.equals(target);\n        assertThat(actual).isTrue();\n    }\n<\/pre><\/div>\n\n\n<p>\u81ea\u4f5c\u30e1\u30bd\u30c3\u30c9\u306a\u306e\u3067\u3001\u672c\u5f53\u306b\u5024\u304c\u691c\u8a3c\u3067\u304d\u3066\u3044\u308b\u306e\u304b\uff1f\u30cd\u30b9\u30c8\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u691c\u8a3c\u3057\u306a\u3044\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\u304b\uff1f\u3092\u30c6\u30b9\u30c8\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002<\/p>\n\n\n\n<p>\u3059\u308b\u3068\u66f8\u304d\u65b9\u306b\u3082\u3088\u308b\u304c\u3001\u4e0a\u306e\u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\u306e\u3088\u3046\u306b\u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\u304c\u89b3\u70b9\u306e\u6570\u3060\u3051\u9577\u304f\u306a\u3063\u3066\u3057\u307e\u3046\u53ef\u80fd\u6027\u304c\u3042\u308b\u3002<\/p>\n\n\n\n<h2 id=\"outline__3\" class=\"wp-block-heading\">\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c\u7528\u30c6\u30b9\u30c8\u3092\u7c21\u6f54\u306b\u66f8\u304f<\/h2>\n\n\n\n<p>ParameterizedTest\u3068Reflection\u3092\u4f7f\u3063\u3066\u66f8\u3044\u3066\u307f\u308b<\/p>\n\n\n\n<h3 id=\"outline__1_2\" class=\"wp-block-heading\">AddressTests.java<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n    @ParameterizedTest\n    @MethodSource(&quot;argumentsProvider&quot;)\n    void compareTest(String fieldName, Object baseValue, Object compareValue, boolean result) {\n        String className = &quot;com.example.demo.entity.Address&quot;;\n        String methodName = &quot;isEqualEntity&quot;;\n\n        new FieldTestUtil(className, methodName, fieldName, baseValue, compareValue, result)\n                .assertField();\n    }\n\n    static Stream&lt;Arguments&gt; argumentsProvider() {\n        return Stream.of(\n                Arguments.arguments(&quot;city&quot;, null, null, true),\n                Arguments.arguments(&quot;city&quot;, City.builder().build(), City.builder().build(), true),\n                Arguments.arguments(&quot;city&quot;, City.builder().build(), City.builder().cityId(4).build(), true),\n                Arguments.arguments(&quot;addressId&quot;, 1, 1, true),\n                Arguments.arguments(&quot;addressId&quot;, 1, 2, false),\n                Arguments.arguments(&quot;address&quot;, null, null, true),\n                Arguments.arguments(&quot;address&quot;, &quot;tokyo&quot;, &quot;tokyo&quot;, true),\n                Arguments.arguments(&quot;address&quot;, &quot;tokyo&quot;, &quot;osaka&quot;, false)\n        );\n    }\n<\/pre><\/div>\n\n\n<h3 id=\"outline__3_2\" class=\"wp-block-heading\">FieldTestUtil.java<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\npublic class FieldTestUtil {\n\n    private final String className;\n    private final String methodName;\n    private String fieldName;\n    private final Object baseFieldValue;\n    private final Object compareTargetFieldValue;\n    private final boolean result;\n\n    public FieldTestUtil(\n            String className,\n            String methodName,\n            String fieldName,\n            Object baseFieldValue,\n            Object compareTargetFieldValue,\n            boolean result\n    ) {\n        this.className = className;\n        this.methodName = methodName;\n        this.fieldName = fieldName;\n        this.baseFieldValue = baseFieldValue;\n        this.compareTargetFieldValue = compareTargetFieldValue;\n        this.result = result;\n    }\n\n    public void assertField() {\n\n        try {\n            Class&lt;?&gt; targetClass = Class.forName(className);\n            Object baseObj = createObject(fieldName, baseFieldValue, targetClass);\n            Object compareTarget = createObject(fieldName, compareTargetFieldValue, targetClass);\n\n            Method method = targetClass.getMethod(methodName, targetClass);\n            boolean actual = (boolean) method.invoke(baseObj, compareTarget);\n            assertThat(actual).isEqualTo(result);\n        } catch (ClassNotFoundException e) {\n            e.printStackTrace();\n            fail(&quot;\u30af\u30e9\u30b9\u540d\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002&quot;);\n        } catch (InstantiationException |\n                IllegalAccessException |\n                InvocationTargetException |\n                NoSuchMethodException |\n                NoSuchFieldException e) {\n            e.printStackTrace();\n            fail(&quot;\u30e1\u30bd\u30c3\u30c9\u540d\u3068\u30d5\u30a3\u30fc\u30eb\u30c9\u540d\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002&quot;);\n        }\n    }\n\n    private Object createObject(String fieldName, Object fieldValue, Class&lt;?&gt; targetClass) \n            throws InstantiationException, IllegalAccessException, InvocationTargetException,\n            NoSuchMethodException, NoSuchFieldException \n    {\n        Object obj = targetClass.getDeclaredConstructor().newInstance();\n        Field objField = targetClass.getDeclaredField(fieldName);\n        objField.setAccessible(true);\n        objField.set(obj, fieldValue);\n        return obj;\n    }\n}\n<\/pre><\/div>\n\n\n<p>\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u691c\u8a3c\u3092\u30ea\u30d5\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u3063\u3066\u884c\u3044\u3001\u305d\u306e\u8a2d\u5b9a\u5024\u3092parameterized\u3059\u308b\u3053\u3068\u3067\u3001\u30c6\u30b9\u30c8\u3057\u305f\u3044\u9805\u76ee\u6570\u5206\u3001<\/p>\n\n\n\n<p><code>Arguments.arguments<\/code><\/p>\n\n\n\n<p>\u3092\u8ffd\u52a0\u3059\u308b\u3060\u3051\u3067\u30c6\u30b9\u30c8\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u540c\u3058\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c2\u3064\u3042\u308b\u6642\u306b\u3001\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u542b\u3081\u3066\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u540c\u3058\u5024\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":257,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[96,68,265,276],"class_list":["post-1200","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programing","tag-java","tag-lombok","tag-parameterizedtest","tag-reflection"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=\/wp\/v2\/posts\/1200","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=1200"}],"version-history":[{"count":2,"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=\/wp\/v2\/posts\/1200\/revisions"}],"predecessor-version":[{"id":1202,"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=\/wp\/v2\/posts\/1200\/revisions\/1202"}],"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=1200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1200"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ito-u-oti.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}