Abstracting getter and setter method references for testingMax heap in JavaMethod for gaining access to...

How do I create uniquely male characters?

Is it legal to have the "// (c) 2019 John Smith" header in all files when there are hundreds of contributors?

Is "plugging out" electronic devices an American expression?

How can I fix this gap between bookcases I made?

Need help identifying/translating a plaque in Tangier, Morocco

How to deal with fear of taking dependencies

Where else does the Shulchan Aruch quote an authority by name?

Patience, young "Padovan"

Is ipsum/ipsa/ipse a third person pronoun, or can it serve other functions?

aging parents with no investments

Why is my log file so massive? 22gb. I am running log backups

Are cabin dividers used to "hide" the flex of the airplane?

Ideas for 3rd eye abilities

Lied on resume at previous job

Can a planet have a different gravitational pull depending on its location in orbit around its sun?

Does it makes sense to buy a new cycle to learn riding?

Pristine Bit Checking

Information to fellow intern about hiring?

What to wear for invited talk in Canada

Where to refill my bottle in India?

Is it wise to focus on putting odd beats on left when playing double bass drums?

What do the Banks children have against barley water?

COUNT(*) or MAX(id) - which is faster?

Is every set a filtered colimit of finite sets?



Abstracting getter and setter method references for testing


Max heap in JavaMethod for gaining access to private members in JavaScript for testing purposesJava class for creating HeadPhone class and Test classFind the first unique character in a stringQuerying Facebook for details of a user's OAuth tokenComparing each element of a list to all other elements of the same listBinary Puzzle Solver - 10000 questionsJava Singleton getter/setterData processing programJava class named HeadPhone to represent a headphone set






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}







1












$begingroup$


Is the following code easy to understand? If not how should it be changed to be more understandable. The purpose of this is reducing similar code in unit tests. This avoids repeating lines for calling getters, setters, and checking for equality.



/**
* Example string for testing.
*/
private static final String STRING_EXAMPLE="stringExample";

/**
* Test that a getter and setter are consistent.
*/
@Test
public void testGetterSettersForA() {
A a = new A();
assertGetterSetterConsistent(STRING_EXAMPLE,a::setC,a::getC);
}

/**
* Assert that a getter and setter are consistent.
* @param input the object to be set.
* @param setter the setter.
* @param getter the getter.
*/
private static <T> void assertGetterSetterConsistent(T input, Consumer<T> setter, Supplier<T> getter) {
boolean consistent =isSetConsistentToGet(input,setter,getter);
assertTrue("Getter and Setter should be consistent.",consistent);
}

/**
* Check if the object being set is the same as the object being gotten.
* @param input the object to be set.
* @param setter the setter.
* @param getter the getter.
* @return whether the object being set is the same as the object being gotten.
*/
private static <T> boolean isSetConsistentToGet(T input, Consumer<T> setter, Supplier<T> getter) {
setter.accept(input);
T getValue = getter.get();
return areEqual(input,getValue);
}

/**
* Null safe check if two objects are equal.
* @param first the first object.
* @param second the second object.
* @return whether the two objects are equal.
*/
private static <T> boolean areEqual(Object first, Object second) {
if(first==null) {
return second==null;
}
return first.equals(second);
}

/**
* Class for testing a getter and setter.
*/
private static final class A{
/**
* Variable named c.
*/
private String c;

/**
* Get c.
* @return c.
*/
public String getC() {
return c;
}

/**
* Set c.
* @param c the value to be set.
*/
public void setC(String c) {
this.c = c;
}
}









share|improve this question









New contributor




user3624390 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$












  • $begingroup$
    Welcome to codereview.se - In my view it would be better to implement equals (and hashcode) in your DTOs rather than using "external" code for that. Almost every IDE generates them for you (as a starting point) so its almost no effort.
    $endgroup$
    – Timothy Truckle
    20 hours ago












  • $begingroup$
    I believe you should only compare object reference equality (e.g. assertSame) when verifying that the value returned by getter is the same as what was passed to the setter.
    $endgroup$
    – TorbenPutkonen
    15 hours ago


















1












$begingroup$


Is the following code easy to understand? If not how should it be changed to be more understandable. The purpose of this is reducing similar code in unit tests. This avoids repeating lines for calling getters, setters, and checking for equality.



/**
* Example string for testing.
*/
private static final String STRING_EXAMPLE="stringExample";

/**
* Test that a getter and setter are consistent.
*/
@Test
public void testGetterSettersForA() {
A a = new A();
assertGetterSetterConsistent(STRING_EXAMPLE,a::setC,a::getC);
}

/**
* Assert that a getter and setter are consistent.
* @param input the object to be set.
* @param setter the setter.
* @param getter the getter.
*/
private static <T> void assertGetterSetterConsistent(T input, Consumer<T> setter, Supplier<T> getter) {
boolean consistent =isSetConsistentToGet(input,setter,getter);
assertTrue("Getter and Setter should be consistent.",consistent);
}

/**
* Check if the object being set is the same as the object being gotten.
* @param input the object to be set.
* @param setter the setter.
* @param getter the getter.
* @return whether the object being set is the same as the object being gotten.
*/
private static <T> boolean isSetConsistentToGet(T input, Consumer<T> setter, Supplier<T> getter) {
setter.accept(input);
T getValue = getter.get();
return areEqual(input,getValue);
}

/**
* Null safe check if two objects are equal.
* @param first the first object.
* @param second the second object.
* @return whether the two objects are equal.
*/
private static <T> boolean areEqual(Object first, Object second) {
if(first==null) {
return second==null;
}
return first.equals(second);
}

/**
* Class for testing a getter and setter.
*/
private static final class A{
/**
* Variable named c.
*/
private String c;

/**
* Get c.
* @return c.
*/
public String getC() {
return c;
}

/**
* Set c.
* @param c the value to be set.
*/
public void setC(String c) {
this.c = c;
}
}









share|improve this question









New contributor




user3624390 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$












  • $begingroup$
    Welcome to codereview.se - In my view it would be better to implement equals (and hashcode) in your DTOs rather than using "external" code for that. Almost every IDE generates them for you (as a starting point) so its almost no effort.
    $endgroup$
    – Timothy Truckle
    20 hours ago












  • $begingroup$
    I believe you should only compare object reference equality (e.g. assertSame) when verifying that the value returned by getter is the same as what was passed to the setter.
    $endgroup$
    – TorbenPutkonen
    15 hours ago














1












1








1


1



$begingroup$


Is the following code easy to understand? If not how should it be changed to be more understandable. The purpose of this is reducing similar code in unit tests. This avoids repeating lines for calling getters, setters, and checking for equality.



/**
* Example string for testing.
*/
private static final String STRING_EXAMPLE="stringExample";

/**
* Test that a getter and setter are consistent.
*/
@Test
public void testGetterSettersForA() {
A a = new A();
assertGetterSetterConsistent(STRING_EXAMPLE,a::setC,a::getC);
}

/**
* Assert that a getter and setter are consistent.
* @param input the object to be set.
* @param setter the setter.
* @param getter the getter.
*/
private static <T> void assertGetterSetterConsistent(T input, Consumer<T> setter, Supplier<T> getter) {
boolean consistent =isSetConsistentToGet(input,setter,getter);
assertTrue("Getter and Setter should be consistent.",consistent);
}

/**
* Check if the object being set is the same as the object being gotten.
* @param input the object to be set.
* @param setter the setter.
* @param getter the getter.
* @return whether the object being set is the same as the object being gotten.
*/
private static <T> boolean isSetConsistentToGet(T input, Consumer<T> setter, Supplier<T> getter) {
setter.accept(input);
T getValue = getter.get();
return areEqual(input,getValue);
}

/**
* Null safe check if two objects are equal.
* @param first the first object.
* @param second the second object.
* @return whether the two objects are equal.
*/
private static <T> boolean areEqual(Object first, Object second) {
if(first==null) {
return second==null;
}
return first.equals(second);
}

/**
* Class for testing a getter and setter.
*/
private static final class A{
/**
* Variable named c.
*/
private String c;

/**
* Get c.
* @return c.
*/
public String getC() {
return c;
}

/**
* Set c.
* @param c the value to be set.
*/
public void setC(String c) {
this.c = c;
}
}









share|improve this question









New contributor




user3624390 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$




Is the following code easy to understand? If not how should it be changed to be more understandable. The purpose of this is reducing similar code in unit tests. This avoids repeating lines for calling getters, setters, and checking for equality.



/**
* Example string for testing.
*/
private static final String STRING_EXAMPLE="stringExample";

/**
* Test that a getter and setter are consistent.
*/
@Test
public void testGetterSettersForA() {
A a = new A();
assertGetterSetterConsistent(STRING_EXAMPLE,a::setC,a::getC);
}

/**
* Assert that a getter and setter are consistent.
* @param input the object to be set.
* @param setter the setter.
* @param getter the getter.
*/
private static <T> void assertGetterSetterConsistent(T input, Consumer<T> setter, Supplier<T> getter) {
boolean consistent =isSetConsistentToGet(input,setter,getter);
assertTrue("Getter and Setter should be consistent.",consistent);
}

/**
* Check if the object being set is the same as the object being gotten.
* @param input the object to be set.
* @param setter the setter.
* @param getter the getter.
* @return whether the object being set is the same as the object being gotten.
*/
private static <T> boolean isSetConsistentToGet(T input, Consumer<T> setter, Supplier<T> getter) {
setter.accept(input);
T getValue = getter.get();
return areEqual(input,getValue);
}

/**
* Null safe check if two objects are equal.
* @param first the first object.
* @param second the second object.
* @return whether the two objects are equal.
*/
private static <T> boolean areEqual(Object first, Object second) {
if(first==null) {
return second==null;
}
return first.equals(second);
}

/**
* Class for testing a getter and setter.
*/
private static final class A{
/**
* Variable named c.
*/
private String c;

/**
* Get c.
* @return c.
*/
public String getC() {
return c;
}

/**
* Set c.
* @param c the value to be set.
*/
public void setC(String c) {
this.c = c;
}
}






java unit-testing






share|improve this question









New contributor




user3624390 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




user3624390 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited yesterday









200_success

131k17157422




131k17157422






New contributor




user3624390 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 2 days ago









user3624390user3624390

82




82




New contributor




user3624390 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





user3624390 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






user3624390 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • $begingroup$
    Welcome to codereview.se - In my view it would be better to implement equals (and hashcode) in your DTOs rather than using "external" code for that. Almost every IDE generates them for you (as a starting point) so its almost no effort.
    $endgroup$
    – Timothy Truckle
    20 hours ago












  • $begingroup$
    I believe you should only compare object reference equality (e.g. assertSame) when verifying that the value returned by getter is the same as what was passed to the setter.
    $endgroup$
    – TorbenPutkonen
    15 hours ago


















  • $begingroup$
    Welcome to codereview.se - In my view it would be better to implement equals (and hashcode) in your DTOs rather than using "external" code for that. Almost every IDE generates them for you (as a starting point) so its almost no effort.
    $endgroup$
    – Timothy Truckle
    20 hours ago












  • $begingroup$
    I believe you should only compare object reference equality (e.g. assertSame) when verifying that the value returned by getter is the same as what was passed to the setter.
    $endgroup$
    – TorbenPutkonen
    15 hours ago
















$begingroup$
Welcome to codereview.se - In my view it would be better to implement equals (and hashcode) in your DTOs rather than using "external" code for that. Almost every IDE generates them for you (as a starting point) so its almost no effort.
$endgroup$
– Timothy Truckle
20 hours ago






$begingroup$
Welcome to codereview.se - In my view it would be better to implement equals (and hashcode) in your DTOs rather than using "external" code for that. Almost every IDE generates them for you (as a starting point) so its almost no effort.
$endgroup$
– Timothy Truckle
20 hours ago














$begingroup$
I believe you should only compare object reference equality (e.g. assertSame) when verifying that the value returned by getter is the same as what was passed to the setter.
$endgroup$
– TorbenPutkonen
15 hours ago




$begingroup$
I believe you should only compare object reference equality (e.g. assertSame) when verifying that the value returned by getter is the same as what was passed to the setter.
$endgroup$
– TorbenPutkonen
15 hours ago










1 Answer
1






active

oldest

votes


















0












$begingroup$

I had no issues, but I'm not sure if "easy to understand" is actually answerable.



There's still room for improvement, though: Your areEqual method can be replaced by Objects.equals.



private static <T> boolean isSetConsistentToGet(T input, Consumer<T> setter, Supplier<T> getter) {
setter.accept(input);
T getValue = getter.get();
return Objects.equals(input, getValue);
}


Let me also throw in two frameworks that might make your life easier:





  1. Project Lombok. Lombok can generate getters and setters for your fields, (IMHO) removing the necessity for writing any explicit tests completely.


  2. OpenPojo. I haven't used that one yet, but it claims to do getter/setter validation automagically and has been suggested on Stack Overflow.






share|improve this answer









$endgroup$














    Your Answer





    StackExchange.ifUsing("editor", function () {
    return StackExchange.using("mathjaxEditing", function () {
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
    });
    });
    }, "mathjax-editing");

    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "196"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });






    user3624390 is a new contributor. Be nice, and check out our Code of Conduct.










    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216993%2fabstracting-getter-and-setter-method-references-for-testing%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0












    $begingroup$

    I had no issues, but I'm not sure if "easy to understand" is actually answerable.



    There's still room for improvement, though: Your areEqual method can be replaced by Objects.equals.



    private static <T> boolean isSetConsistentToGet(T input, Consumer<T> setter, Supplier<T> getter) {
    setter.accept(input);
    T getValue = getter.get();
    return Objects.equals(input, getValue);
    }


    Let me also throw in two frameworks that might make your life easier:





    1. Project Lombok. Lombok can generate getters and setters for your fields, (IMHO) removing the necessity for writing any explicit tests completely.


    2. OpenPojo. I haven't used that one yet, but it claims to do getter/setter validation automagically and has been suggested on Stack Overflow.






    share|improve this answer









    $endgroup$


















      0












      $begingroup$

      I had no issues, but I'm not sure if "easy to understand" is actually answerable.



      There's still room for improvement, though: Your areEqual method can be replaced by Objects.equals.



      private static <T> boolean isSetConsistentToGet(T input, Consumer<T> setter, Supplier<T> getter) {
      setter.accept(input);
      T getValue = getter.get();
      return Objects.equals(input, getValue);
      }


      Let me also throw in two frameworks that might make your life easier:





      1. Project Lombok. Lombok can generate getters and setters for your fields, (IMHO) removing the necessity for writing any explicit tests completely.


      2. OpenPojo. I haven't used that one yet, but it claims to do getter/setter validation automagically and has been suggested on Stack Overflow.






      share|improve this answer









      $endgroup$
















        0












        0








        0





        $begingroup$

        I had no issues, but I'm not sure if "easy to understand" is actually answerable.



        There's still room for improvement, though: Your areEqual method can be replaced by Objects.equals.



        private static <T> boolean isSetConsistentToGet(T input, Consumer<T> setter, Supplier<T> getter) {
        setter.accept(input);
        T getValue = getter.get();
        return Objects.equals(input, getValue);
        }


        Let me also throw in two frameworks that might make your life easier:





        1. Project Lombok. Lombok can generate getters and setters for your fields, (IMHO) removing the necessity for writing any explicit tests completely.


        2. OpenPojo. I haven't used that one yet, but it claims to do getter/setter validation automagically and has been suggested on Stack Overflow.






        share|improve this answer









        $endgroup$



        I had no issues, but I'm not sure if "easy to understand" is actually answerable.



        There's still room for improvement, though: Your areEqual method can be replaced by Objects.equals.



        private static <T> boolean isSetConsistentToGet(T input, Consumer<T> setter, Supplier<T> getter) {
        setter.accept(input);
        T getValue = getter.get();
        return Objects.equals(input, getValue);
        }


        Let me also throw in two frameworks that might make your life easier:





        1. Project Lombok. Lombok can generate getters and setters for your fields, (IMHO) removing the necessity for writing any explicit tests completely.


        2. OpenPojo. I haven't used that one yet, but it claims to do getter/setter validation automagically and has been suggested on Stack Overflow.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered yesterday









        MarvinMarvin

        520312




        520312






















            user3624390 is a new contributor. Be nice, and check out our Code of Conduct.










            draft saved

            draft discarded


















            user3624390 is a new contributor. Be nice, and check out our Code of Conduct.













            user3624390 is a new contributor. Be nice, and check out our Code of Conduct.












            user3624390 is a new contributor. Be nice, and check out our Code of Conduct.
















            Thanks for contributing an answer to Code Review Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            Use MathJax to format equations. MathJax reference.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216993%2fabstracting-getter-and-setter-method-references-for-testing%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            is 'sed' thread safeWhat should someone know about using Python scripts in the shell?Nexenta bash script uses...

            How do i solve the “ No module named 'mlxtend' ” issue on Jupyter?

            Pilgersdorf Inhaltsverzeichnis Geografie | Geschichte | Bevölkerungsentwicklung | Politik | Kultur...