You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Alcotest has a strange (buggy?) behavior when a test file opens a module of the library of the same project. In the example below, test/dune indicates that there are two tests, a and b corresponding to the two files test/a.ml and test/b.ml, but when running dune runtest, the test a is run twice and the test b is not run. This is apparently due to the fact that test/b.ml uses a function defined in lib/a.ml by using open Alcobug_lib [...] A.fa, and somehow this tricks Alcotest into running a a second time instead of running b. Note that when not using open but the full qualified name Alcobug_lib.A.fa, the bug disappears and both tests are run as expected.
Here is the full example:
$ tree -a
.
├── bin
│ ├── dune
│ └── main.ml
├── dune-project
├── lib
│ ├── a.ml
│ ├── b.ml
│ └── dune
└── test
├── a.ml
├── b.ml
└── dune
3 directories, 9 files
$ cat dune-project; echo; for i in $(ls **/*); do echo "(*** $i ***)"; cat $i; echo; done
(lang dune 3.15)
(package
(name alcobug_name)
(depends
ocaml
dune
(alcotest :with-test)))
(*** bin/dune ***)
(executable
(public_name alcobug_public)
(name main)
(libraries alcobug_lib))
(*** bin/main.ml ***)
let () = print_endline "Hello"
(*** lib/a.ml ***)
let fa x = x
(*** lib/b.ml ***)
let fb x = x
(*** lib/dune ***)
(library
(name alcobug_lib))
(*** test/a.ml ***)
let () =
let _ = Alcobug_lib.A.fa 0 in
Alcotest.run "aze" [ ("azer", [ Alcotest.test_case "azert" `Quick (fun () -> ()) ]) ]
(*** test/b.ml ***)
open Alcobug_lib
let () =
let _ = A.fa 0 in
Alcotest.run "baze"
[ ("bazer", [ Alcotest.test_case "bazert" `Quick (fun () -> ()) ]) ]
(*** test/dune ***)
(tests
(names a b)
(libraries alcotest alcobug_lib))
$ dune runtest
Testing `aze'.
This run has ID `A8AJ7II1'.
[OK] azer 0 azert.
Full test results in `xxx/_build/default/test/_build/_tests/aze'.
Test Successful in 0.000s. 1 test run.
Testing `aze'.
This run has ID `1BQPG8KQ'.
[OK] azer 0 azert.
Full test results in `xxx/_build/default/test/_build/_tests/aze'.
Test Successful in 0.000s. 1 test run.
The text was updated successfully, but these errors were encountered:
I think this has to do with the fact that we are reusing the same name for the corresponding test module. I managed to work around this by prefixing all test modules with Test_.
I think this has to do with the fact that we are reusing the same name for the corresponding test module. I managed to work around this by prefixing all test modules with Test_.
Yes, that's the reason. Maybe the term "corresponding file" in the title was not clear, but that's what was meant: often, when I have a file in the library lib/a.ml, the corresponding test file is test/a.ml. I also had to rename some of my files like test/a_.ml, which is not very satisfying.
Alcotest has a strange (buggy?) behavior when a test file opens a module of the library of the same project. In the example below,
test/dune
indicates that there are two tests,a
andb
corresponding to the two filestest/a.ml
andtest/b.ml
, but when runningdune runtest
, the testa
is run twice and the testb
is not run. This is apparently due to the fact thattest/b.ml
uses a function defined inlib/a.ml
by usingopen Alcobug_lib [...] A.fa
, and somehow this tricks Alcotest into runninga
a second time instead of runningb
. Note that when not usingopen
but the full qualified nameAlcobug_lib.A.fa
, the bug disappears and both tests are run as expected.Here is the full example:
The text was updated successfully, but these errors were encountered: