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












0














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.










share|improve this question



























    0














    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.










    share|improve this question

























      0












      0








      0







      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.










      share|improve this question













      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






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 17 hours ago









      SamSam

      12217




      12217






















          1 Answer
          1






          active

          oldest

          votes


















          1














          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.






          share|improve this answer





















          • @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











          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
          });


          }
          });














          draft saved

          draft discarded


















          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









          1














          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.






          share|improve this answer





















          • @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
















          1














          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.






          share|improve this answer





















          • @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














          1












          1








          1






          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.






          share|improve this answer












          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.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          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


















          • @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


















          draft saved

          draft discarded




















































          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%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





















































          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

          How to reconfigure Docker Trusted Registry 2.x.x to use CEPH FS mount instead of NFS and other traditional...

          is 'sed' thread safe

          How to make a Squid Proxy server?