请解释我们应该如何测试 Julia 库以及为什么两个中断之一

Please explain how we're supposed to test Julia libraries and why one of two breaks

在我的 Advent of Code repository 中,我从去年开始就有了一个实用程序库,今年也一直在使用它的东西。

今年我想添加第二个以更快地加载输入文件。出于某种原因,单元测试和 using 它适用于旧库,但不适用于第二个库。

我尝试尽可能统一两个文件夹,直到 Project.toml 现在相等。

two directories 看起来像这样(ProblemParser 失败,Utils 工作):

ProblemParser ⛔
├── Manifest.toml
├── Project.toml
├── src
│  └── ProblemParser.jl
└── test
   ├── Manifest.toml
   ├── Project.toml
   └── runtests.jl

Utils ✅
├── Manifest.toml
├── Project.toml
├── src
│  └── Utils.jl
└── test
   ├── Manifest.toml
   ├── Project.toml
   └── runtests.jl

将它们添加到 Project (Manifest) 工作正常(其他内容被遗漏):

(AoC 2021) pkg> status
      Status `~/src/me/AoC/21/Project.toml`
  [16064a1e] ProblemParser v0.1.0 `../ProblemParser`
  [c4255648] Utils v0.1.0 `../Utils`

但是尝试使用 ProblemParser 并不顺利。

julia> using Utils

julia> # that worked

julia> using ProblemParser
ERROR: KeyError: key ProblemParser [16064a1e-6b5f-4a50-97c7-fe66cda9553b] not found
Stacktrace:
 [1] getindex
   @ ./dict.jl:481 [inlined]
 [2] root_module
   @ ./loading.jl:1056 [inlined]
 [3] require(uuidkey::Base.PkgId)
   @ Base ./loading.jl:1022
 [4] require(into::Module, mod::Symbol)
   @ Base ./loading.jl:997

尝试 运行 测试时会发生同样的 yes/no。

(AoC 2021) pkg> activate ../Utils/
  Activating project at `~/src/me/AoC/Utils`

(Utils) pkg> test
     Testing Utils
      Status `/tmp/jl_AGawpC/Project.toml`
  [c4255648] Utils v0.1.0 `~/src/me/AoC/Utils`
  [8dfed614] Test `@stdlib/Test`
      Status `/tmp/jl_AGawpC/Manifest.toml`
  [79e6a3ab] Adapt v3.3.1

  ----- 8< snipped 8< -----

  [4536629a] OpenBLAS_jll `@stdlib/OpenBLAS_jll`
  [8e850b90] libblastrampoline_jll `@stdlib/libblastrampoline_jll`
     Testing Running tests...
Test Summary:      | Pass  Total
@something_nothing |   15     15
     Testing Utils tests passed

(Utils) pkg> activate ../ProblemParser/
  Activating project at `~/src/me/AoC/ProblemParser`

(ProblemParser) pkg> test
     Testing ProblemParser
      Status `/tmp/jl_6v5Y3D/Project.toml`
  [16064a1e] ProblemParser v0.1.0 `~/src/me/AoC/ProblemParser`
  [8dfed614] Test `@stdlib/Test`
      Status `/tmp/jl_6v5Y3D/Manifest.toml`
  [16064a1e] ProblemParser v0.1.0 `~/src/me/AoC/ProblemParser`
  [2a0f44e3] Base64 `@stdlib/Base64`

  ----- 8< snipped 8< -----

  [9e88b42a] Serialization `@stdlib/Serialization`
  [8dfed614] Test `@stdlib/Test`
     Testing Running tests...
ERROR: LoadError: ArgumentError: Package ProjectParser not found in current path:
- Run `import Pkg; Pkg.add("ProjectParser")` to install the ProjectParser package.

Stacktrace:
 [1] require(into::Module, mod::Symbol)
   @ Base ./loading.jl:967
 [2] include(fname::String)
   @ Base.MainInclude ./client.jl:451
 [3] top-level scope
   @ none:6
in expression starting at /home/tsbr/src/me/AoC/ProblemParser/test/runtests.jl:1
ERROR: Package ProblemParser errored during testing

两者有什么区别?是什么让一个有效而另一个无效?
我就是没看到。

啊,你在 src/ProblemParser.jl 中定义了错误的模块名称 - 第一行是 module ProjectParser 而不是 module ProblemParser