5

我想在我的 Elixir 项目中有两组单独的单元测试,我可以使用不同的 ExUnit 配置单独运行它们。我正在研究 ExUnit 格式化程序,我正在尝试为它编写单元测试。为了测试它,我想我会创建另一个目录 ( example_tests),其中包含一个test_helper.exs类似于 in 的文件test/,但将 ExUnit 配置为使用我的自定义格式化程序。我将我的格式化程序添加为 ExUnit 格式化程序,然后创建了一个测试模块example_tests。现在的问题是我不知道如何配置 ExUnit 以example_tests/使用example_tests/test_helper.exs.

我发现有一个test_paths配置参数可以在mix.exs文件中设置。问题是值是在每个项目的基础上设置的,我需要它有两个不同的值(通常只是["test"]为了使用 formatter 进行测试运行["example_tests"])。我假设我可以在每个任务的基础上覆盖配置值,所以我也创建了一个 example_tests 任务,但我不知道如何更改配置。

有没有办法Mix.Project.config在每个任务的基础上自定义项目配置()?或者,有没有更好的方法来创建具有不同 ExUnit 配置的两组单独的测试?

更新:

这是testMix 任务的源代码链接:https ://github.com/elixir-lang/elixir/blob/master/lib/mix/lib/mix/tasks/test.ex

4

1 回答 1

3

您可以在 中放置多个路径test_paths,只要它们都有一个 test_helper.exs 文件,当执行给定路径中的测试时,将使用该路径的测试助手执行它们。所以你下面的任何东西test都可以使用默认的格式化程序,但是下面的任何东西example_test都可以使用你的自定义格式化程序运行。

您还可以ExUnit.configure(formatters: [MyFormatter])setup_all给定测试模块的回调中运行,以便该模块中的所有测试都使用您的格式化程序,并使用on_exit回调将其切换回默认值。您可能需要async: false为您的测试进行设置,因为我认为格式化程序配置对于所有测试都是全局的 - 或者使用 moduletag 属性(例如@moduletag :custom_formatter)来标记一组测试应该作为哪个组运行,然后使用mix test --include custom_formattermix test --exclude custom_formatter仅将这些测试作为一个组一起运行。然后使用混合任务别名来简化您的生活(例如mix test,使用默认格式化程序mix test.custom运行测试并使用您的自定义格式化程序运行测试。

希望其中一个对您来说是一个可行的解决方案!

于 2016-03-27T04:33:00.167 回答