Currently, ExUnit's `async: true` option would run test cases in this module synchronously, but only run this module asynchronously along with other `async: true` modules.
This is to propose we add an option for ExUnit to run asynchronously by test cases. # Background 1. Async by module was a surprise My initial understanding of `async: true` is async by cases, instead of modules. It's a bit surprising the behavior is later. 2. Async by module would behave more like synchronous tests as a module gets more test cases As we grow our libraries/apps, a test module will have more and more test cases. It's tedious to break them into separate modules to speed up the test suite run. And breaking them into modules has the cost of making related tests further from each other. # Benefits 1. speed up test suite runs for libraries, apps almost effortlessly 2. more accurate `async: xxx seconds, sync: yyy seconds` metrics # Caveats 1. Async by test cases may not run faster than async by modules: - managing these test cases has a cost on its own - communicating these test cases between ExUnit Server and Runner has costs as well 2. backward compatibility with current `async: true` behavior some libs or apps may rely on the async by module behavior. we should still allow user to use `async: ture` by default, and make async by test cases an easily opt-in feature. 3. Async by test cases may complex the ExUnit implementation even further # Potential solution I looked into current ExUnit implementation a little bit I think `async by test cases` is doable, but I don't have a concrete solution yet A initial idea is to: 1. instead of saving modules in ExUnit Server, we save test cases (mfa) in ExUnit Server 2. when Runner asks for more async tests, ExUnit Server returns test cases (and also modules) for Runner This seems to be a huge change, so I'd like to know if this feature is desirable/feasible from the core team's PoV before I dig more into it. Best, Yiming -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/51ad9575-71b9-4afe-8996-1dd9e2aea7b8n%40googlegroups.com.