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;
}
$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;
}
}
java unit-testing
New contributor
$endgroup$
add a comment |
$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;
}
}
java unit-testing
New contributor
$endgroup$
$begingroup$
Welcome to codereview.se - In my view it would be better to implementequals
(andhashcode
) 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
add a comment |
$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;
}
}
java unit-testing
New contributor
$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
java unit-testing
New contributor
New contributor
edited yesterday
200_success
131k17157422
131k17157422
New contributor
asked 2 days ago
user3624390user3624390
82
82
New contributor
New contributor
$begingroup$
Welcome to codereview.se - In my view it would be better to implementequals
(andhashcode
) 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
add a comment |
$begingroup$
Welcome to codereview.se - In my view it would be better to implementequals
(andhashcode
) 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
add a comment |
1 Answer
1
active
oldest
votes
$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:
Project Lombok. Lombok can generate getters and setters for your fields, (IMHO) removing the necessity for writing any explicit tests completely.
OpenPojo. I haven't used that one yet, but it claims to do getter/setter validation automagically and has been suggested on Stack Overflow.
$endgroup$
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
$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:
Project Lombok. Lombok can generate getters and setters for your fields, (IMHO) removing the necessity for writing any explicit tests completely.
OpenPojo. I haven't used that one yet, but it claims to do getter/setter validation automagically and has been suggested on Stack Overflow.
$endgroup$
add a comment |
$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:
Project Lombok. Lombok can generate getters and setters for your fields, (IMHO) removing the necessity for writing any explicit tests completely.
OpenPojo. I haven't used that one yet, but it claims to do getter/setter validation automagically and has been suggested on Stack Overflow.
$endgroup$
add a comment |
$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:
Project Lombok. Lombok can generate getters and setters for your fields, (IMHO) removing the necessity for writing any explicit tests completely.
OpenPojo. I haven't used that one yet, but it claims to do getter/setter validation automagically and has been suggested on Stack Overflow.
$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:
Project Lombok. Lombok can generate getters and setters for your fields, (IMHO) removing the necessity for writing any explicit tests completely.
OpenPojo. I haven't used that one yet, but it claims to do getter/setter validation automagically and has been suggested on Stack Overflow.
answered yesterday
MarvinMarvin
520312
520312
add a comment |
add a comment |
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.
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
$begingroup$
Welcome to codereview.se - In my view it would be better to implement
equals
(andhashcode
) 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