Running OUnit tests using dune










1















I'm having difficulties running oUnit tests, mostly because I'm new to both dune and OUnit. dune complains when I run dune runtest:



File "test/dune", line 4, characters 13-14:
Error: Library "f" not found.
Hint: try: dune external-lib-deps --missing @runtest


Here's the project structure:



├── dune
├── f.ml # This is the source file.
└── test
├── dune
└── f_test.ml # This is the test.


This is dune:



(executable
(name f))


This is test/dune:



(test
(name f_test)
(libraries oUnit f)) ; <- `f` here causes problems.


I can see that the error appears because dune does not know about f.ml, and hence does not know about f in the dune file.



Question is: How can I make dune compile f.ml in such a way that test/dune knows about the f library that I use in test/f_test.ml? How can I run the unit tests properly?










share|improve this question




























    1















    I'm having difficulties running oUnit tests, mostly because I'm new to both dune and OUnit. dune complains when I run dune runtest:



    File "test/dune", line 4, characters 13-14:
    Error: Library "f" not found.
    Hint: try: dune external-lib-deps --missing @runtest


    Here's the project structure:



    ├── dune
    ├── f.ml # This is the source file.
    └── test
    ├── dune
    └── f_test.ml # This is the test.


    This is dune:



    (executable
    (name f))


    This is test/dune:



    (test
    (name f_test)
    (libraries oUnit f)) ; <- `f` here causes problems.


    I can see that the error appears because dune does not know about f.ml, and hence does not know about f in the dune file.



    Question is: How can I make dune compile f.ml in such a way that test/dune knows about the f library that I use in test/f_test.ml? How can I run the unit tests properly?










    share|improve this question


























      1












      1








      1








      I'm having difficulties running oUnit tests, mostly because I'm new to both dune and OUnit. dune complains when I run dune runtest:



      File "test/dune", line 4, characters 13-14:
      Error: Library "f" not found.
      Hint: try: dune external-lib-deps --missing @runtest


      Here's the project structure:



      ├── dune
      ├── f.ml # This is the source file.
      └── test
      ├── dune
      └── f_test.ml # This is the test.


      This is dune:



      (executable
      (name f))


      This is test/dune:



      (test
      (name f_test)
      (libraries oUnit f)) ; <- `f` here causes problems.


      I can see that the error appears because dune does not know about f.ml, and hence does not know about f in the dune file.



      Question is: How can I make dune compile f.ml in such a way that test/dune knows about the f library that I use in test/f_test.ml? How can I run the unit tests properly?










      share|improve this question
















      I'm having difficulties running oUnit tests, mostly because I'm new to both dune and OUnit. dune complains when I run dune runtest:



      File "test/dune", line 4, characters 13-14:
      Error: Library "f" not found.
      Hint: try: dune external-lib-deps --missing @runtest


      Here's the project structure:



      ├── dune
      ├── f.ml # This is the source file.
      └── test
      ├── dune
      └── f_test.ml # This is the test.


      This is dune:



      (executable
      (name f))


      This is test/dune:



      (test
      (name f_test)
      (libraries oUnit f)) ; <- `f` here causes problems.


      I can see that the error appears because dune does not know about f.ml, and hence does not know about f in the dune file.



      Question is: How can I make dune compile f.ml in such a way that test/dune knows about the f library that I use in test/f_test.ml? How can I run the unit tests properly?







      ocaml ounit ocaml-dune






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 15 '18 at 12:49







      Flux

















      asked Nov 15 '18 at 10:34









      FluxFlux

      1,1371832




      1,1371832






















          1 Answer
          1






          active

          oldest

          votes


















          1














          One possibility is to split f into a private library and an executable, and then test the split library.



          EDIT:



          For instance, the project structure could be updated to



          ├── dune
          ├── f.ml # f only contains the I/O glue code.
          ├── lib
          | ├── dune
          | └── a.ml # a implements the features that need to be tested.
          └── test
          ├── dune
          └── test.ml # This is the test.


          with dune



           (executable (name main) (libraries Lib)) 


          For the test, test/dune:



          (test (name test) (libraries Lib oUnit))


          and finally lib/dune



          (library (name Lib))


          With this setup, the test can be run with dune runtest.






          share|improve this answer

























          • Do you mind providing a short example?

            – Flux
            Nov 16 '18 at 1:16










          Your Answer






          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: "1"
          ;
          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: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          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%2fstackoverflow.com%2fquestions%2f53317459%2frunning-ounit-tests-using-dune%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














          One possibility is to split f into a private library and an executable, and then test the split library.



          EDIT:



          For instance, the project structure could be updated to



          ├── dune
          ├── f.ml # f only contains the I/O glue code.
          ├── lib
          | ├── dune
          | └── a.ml # a implements the features that need to be tested.
          └── test
          ├── dune
          └── test.ml # This is the test.


          with dune



           (executable (name main) (libraries Lib)) 


          For the test, test/dune:



          (test (name test) (libraries Lib oUnit))


          and finally lib/dune



          (library (name Lib))


          With this setup, the test can be run with dune runtest.






          share|improve this answer

























          • Do you mind providing a short example?

            – Flux
            Nov 16 '18 at 1:16















          1














          One possibility is to split f into a private library and an executable, and then test the split library.



          EDIT:



          For instance, the project structure could be updated to



          ├── dune
          ├── f.ml # f only contains the I/O glue code.
          ├── lib
          | ├── dune
          | └── a.ml # a implements the features that need to be tested.
          └── test
          ├── dune
          └── test.ml # This is the test.


          with dune



           (executable (name main) (libraries Lib)) 


          For the test, test/dune:



          (test (name test) (libraries Lib oUnit))


          and finally lib/dune



          (library (name Lib))


          With this setup, the test can be run with dune runtest.






          share|improve this answer

























          • Do you mind providing a short example?

            – Flux
            Nov 16 '18 at 1:16













          1












          1








          1







          One possibility is to split f into a private library and an executable, and then test the split library.



          EDIT:



          For instance, the project structure could be updated to



          ├── dune
          ├── f.ml # f only contains the I/O glue code.
          ├── lib
          | ├── dune
          | └── a.ml # a implements the features that need to be tested.
          └── test
          ├── dune
          └── test.ml # This is the test.


          with dune



           (executable (name main) (libraries Lib)) 


          For the test, test/dune:



          (test (name test) (libraries Lib oUnit))


          and finally lib/dune



          (library (name Lib))


          With this setup, the test can be run with dune runtest.






          share|improve this answer















          One possibility is to split f into a private library and an executable, and then test the split library.



          EDIT:



          For instance, the project structure could be updated to



          ├── dune
          ├── f.ml # f only contains the I/O glue code.
          ├── lib
          | ├── dune
          | └── a.ml # a implements the features that need to be tested.
          └── test
          ├── dune
          └── test.ml # This is the test.


          with dune



           (executable (name main) (libraries Lib)) 


          For the test, test/dune:



          (test (name test) (libraries Lib oUnit))


          and finally lib/dune



          (library (name Lib))


          With this setup, the test can be run with dune runtest.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 16 '18 at 6:38

























          answered Nov 15 '18 at 17:48









          octachronoctachron

          5,1431614




          5,1431614












          • Do you mind providing a short example?

            – Flux
            Nov 16 '18 at 1:16

















          • Do you mind providing a short example?

            – Flux
            Nov 16 '18 at 1:16
















          Do you mind providing a short example?

          – Flux
          Nov 16 '18 at 1:16





          Do you mind providing a short example?

          – Flux
          Nov 16 '18 at 1:16



















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Stack Overflow!


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

          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%2fstackoverflow.com%2fquestions%2f53317459%2frunning-ounit-tests-using-dune%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







          這個網誌中的熱門文章

          What does pagestruct do in Eviews?

          Dutch intervention in Lombok and Karangasem

          Channel Islands