Trying to follow BDD in tests, end up with two exactly same tests

Multi tool use
I am testing my repository class:
interface AccountRepository{
void save(Account account);
Optional<Account> findById(Long id);
}
And when writing tests, I ended up with two semantically different tests, but they essentially contain exactly the same code:
@DisplayName("user exists -- account does not exist -- save persists")
@Test
void save_userExistsAccountDoesNotExist_persisted() {
//arrange
User existingUser = userRepo.save(new User("John", "Smith"));
Account account = new Account(existingUser, null);
//act
repo.save(account);
//assert
assertThat(repo.findById(account.getId())).contains(account);
}
@DisplayName("user exists -- account exists -- findById finds")
@Test
void findById_userExistsAccountExists_found() {
//arrange
User existingUser = userRepo.save(new User("John", "Smith"));
Account existingAccount = repo.save(new Account(existingUser, null));
//act & assert
assertThat(repo.findById(existingAccount.getId())).contains(existingAccount);
}
I don't really want to remove one of them because that serves different purposes in my head but I am worried that I may have understood something wrong.
java unit-testing junit bdd
add a comment |
I am testing my repository class:
interface AccountRepository{
void save(Account account);
Optional<Account> findById(Long id);
}
And when writing tests, I ended up with two semantically different tests, but they essentially contain exactly the same code:
@DisplayName("user exists -- account does not exist -- save persists")
@Test
void save_userExistsAccountDoesNotExist_persisted() {
//arrange
User existingUser = userRepo.save(new User("John", "Smith"));
Account account = new Account(existingUser, null);
//act
repo.save(account);
//assert
assertThat(repo.findById(account.getId())).contains(account);
}
@DisplayName("user exists -- account exists -- findById finds")
@Test
void findById_userExistsAccountExists_found() {
//arrange
User existingUser = userRepo.save(new User("John", "Smith"));
Account existingAccount = repo.save(new Account(existingUser, null));
//act & assert
assertThat(repo.findById(existingAccount.getId())).contains(existingAccount);
}
I don't really want to remove one of them because that serves different purposes in my head but I am worried that I may have understood something wrong.
java unit-testing junit bdd
add a comment |
I am testing my repository class:
interface AccountRepository{
void save(Account account);
Optional<Account> findById(Long id);
}
And when writing tests, I ended up with two semantically different tests, but they essentially contain exactly the same code:
@DisplayName("user exists -- account does not exist -- save persists")
@Test
void save_userExistsAccountDoesNotExist_persisted() {
//arrange
User existingUser = userRepo.save(new User("John", "Smith"));
Account account = new Account(existingUser, null);
//act
repo.save(account);
//assert
assertThat(repo.findById(account.getId())).contains(account);
}
@DisplayName("user exists -- account exists -- findById finds")
@Test
void findById_userExistsAccountExists_found() {
//arrange
User existingUser = userRepo.save(new User("John", "Smith"));
Account existingAccount = repo.save(new Account(existingUser, null));
//act & assert
assertThat(repo.findById(existingAccount.getId())).contains(existingAccount);
}
I don't really want to remove one of them because that serves different purposes in my head but I am worried that I may have understood something wrong.
java unit-testing junit bdd
I am testing my repository class:
interface AccountRepository{
void save(Account account);
Optional<Account> findById(Long id);
}
And when writing tests, I ended up with two semantically different tests, but they essentially contain exactly the same code:
@DisplayName("user exists -- account does not exist -- save persists")
@Test
void save_userExistsAccountDoesNotExist_persisted() {
//arrange
User existingUser = userRepo.save(new User("John", "Smith"));
Account account = new Account(existingUser, null);
//act
repo.save(account);
//assert
assertThat(repo.findById(account.getId())).contains(account);
}
@DisplayName("user exists -- account exists -- findById finds")
@Test
void findById_userExistsAccountExists_found() {
//arrange
User existingUser = userRepo.save(new User("John", "Smith"));
Account existingAccount = repo.save(new Account(existingUser, null));
//act & assert
assertThat(repo.findById(existingAccount.getId())).contains(existingAccount);
}
I don't really want to remove one of them because that serves different purposes in my head but I am worried that I may have understood something wrong.
java unit-testing junit bdd
java unit-testing junit bdd
asked 17 hours ago


SamSam
12217
12217
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
In my opinion, if you think that each test has a different meaning, there is nothing wrong with them.
What you can do to extract the duplication is to have a dedicated method to arrange your test. But in this case there will be no real gain.
@Sam, please consider accepting an answer if you have one.
– gervais.b
12 hours ago
It's very reasonable to wait more than three hours to see if a better reply come in before accepting the first answer.
– Eric Stein
12 hours ago
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
});
}
});
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%2f211250%2ftrying-to-follow-bdd-in-tests-end-up-with-two-exactly-same-tests%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
In my opinion, if you think that each test has a different meaning, there is nothing wrong with them.
What you can do to extract the duplication is to have a dedicated method to arrange your test. But in this case there will be no real gain.
@Sam, please consider accepting an answer if you have one.
– gervais.b
12 hours ago
It's very reasonable to wait more than three hours to see if a better reply come in before accepting the first answer.
– Eric Stein
12 hours ago
add a comment |
In my opinion, if you think that each test has a different meaning, there is nothing wrong with them.
What you can do to extract the duplication is to have a dedicated method to arrange your test. But in this case there will be no real gain.
@Sam, please consider accepting an answer if you have one.
– gervais.b
12 hours ago
It's very reasonable to wait more than three hours to see if a better reply come in before accepting the first answer.
– Eric Stein
12 hours ago
add a comment |
In my opinion, if you think that each test has a different meaning, there is nothing wrong with them.
What you can do to extract the duplication is to have a dedicated method to arrange your test. But in this case there will be no real gain.
In my opinion, if you think that each test has a different meaning, there is nothing wrong with them.
What you can do to extract the duplication is to have a dedicated method to arrange your test. But in this case there will be no real gain.
answered 16 hours ago
gervais.bgervais.b
1,072410
1,072410
@Sam, please consider accepting an answer if you have one.
– gervais.b
12 hours ago
It's very reasonable to wait more than three hours to see if a better reply come in before accepting the first answer.
– Eric Stein
12 hours ago
add a comment |
@Sam, please consider accepting an answer if you have one.
– gervais.b
12 hours ago
It's very reasonable to wait more than three hours to see if a better reply come in before accepting the first answer.
– Eric Stein
12 hours ago
@Sam, please consider accepting an answer if you have one.
– gervais.b
12 hours ago
@Sam, please consider accepting an answer if you have one.
– gervais.b
12 hours ago
It's very reasonable to wait more than three hours to see if a better reply come in before accepting the first answer.
– Eric Stein
12 hours ago
It's very reasonable to wait more than three hours to see if a better reply come in before accepting the first answer.
– Eric Stein
12 hours ago
add a comment |
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%2f211250%2ftrying-to-follow-bdd-in-tests-end-up-with-two-exactly-same-tests%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
wQ9mJIpzjOt7yDa,ebE7nMZanir8q727MYI