来源信息
- 仓库
- JetBrains/intellij-community
- 最近来源活动
- 2026年8月5日 18:20
- 检测到的 SKILL.md 语言
- 英语
- 星标
- 20,445
- 分支
- 6,009
安装方式
默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。
检查来源文件
决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。
正在显示 SKILL.md
SKILL.md
来源说明 · 只读预览- name
- testing
- description
- Run or troubleshoot IntelliJ `tests.cmd` tests and discovery.
# Testing Guide for IntelliJ IDEA
## Quick Start
```bash
./tests.cmd --module <module> --test <pattern>
```
- `--module` — the JPS module containing the test classes (always use the test's own module). To find the module name, look at the `.iml` file in the test's directory — the module name is the `.iml` filename without the extension.
- `--test` — FQN, wildcard pattern, or FQN#methodName
```bash
# Single test class (FQN)
./tests.cmd --module intellij.cidr.compiler.custom.tests \
--test com.intellij.cidr.compiler.custom.CidrCustomCompilerReadTest
# Wildcard pattern
./tests.cmd --module intellij.goland.tests \
--test com.goide.comments.*Test
# Specific test method (wildcards cannot be used with #)
./tests.cmd --module intellij.cidr.compiler.custom.tests \
--test com.intellij.cidr.compiler.custom.CidrCustomCompilerReadTest#testSingleDefine
# Multiple (semicolon-separated)
./tests.cmd --module intellij.platform.build.tests \
--test org.jetbrains.intellij.build.TestSelectorsTest#class selector;org.jetbrains.intellij.build.FileSetTest
```
**Simple class names like `MyTest` do NOT work** — always use FQN or wildcard (`*MyTest`).
### Why simple names fail
Patterns are transformed (`*` → `.*`, `.` → `\.`) and matched against the fully qualified class name using `Pattern.matches()` (full-string match):
| Pattern | Regex | Matches `org.example.MyTest`? |
|---------|-------|-------------------------------|
| `MyTest` | `MyTest` | NO — doesn't cover the package prefix |
| `*MyTest` | `.*MyTest` | YES |
| `org.example.MyTest` | `org\.example\.MyTest` | YES |
| `org.example.*` | `org\.example\..*` | YES |
### Community tests
Use `community/tests.cmd` for tests that belong to community-only modules:
```bash
./community/tests.cmd --module <module> --test <pattern>
```
### API checks via Bazel
In an Ultimate checkout, run `ApiCheckTest` directly through its Bazel test target. For a focused check, pass one or more comma-separated module names:
```bash
bazel test //tests/ideaProjectStructure:projectStructureTests_test \
--test_filter=com.intellij.ideaProjectStructure.api.ApiCheckTest \
--test_arg=--jvm_flag=-Dapi.dump.test.modules.to.check=<module>[,<module>...] \
--test_output=summary \
--test_summary=detailed
```
Omit `--test_arg` to check all modules. Do not use `bazel run` for this target: it streams noisy test output and does not provide Bazel's test summary.
On failure, keep agent context small by extracting the failing dynamic-test names and messages from Bazel's JUnit report instead of printing the full `test.log`:
```bash
xmllint --xpath '//testcase[failure or error]/@name | //testcase[failure or error]/*[self::failure or self::error]/@message' \
out/bazel-testlogs/tests/ideaProjectStructure/projectStructureTests_test/test.xml
```
### Product layout and packaging changes
When changing `ProductProperties`, `productImplementationModules`, product content descriptors, plugin/module-set packaging, or generated product layout XML, also run:
```bash
./tests.cmd --module intellij.idea.ultimate.build.tests --test com.intellij.idea.ultimate.build.smokeTests.AllProductsPackagingTest
```
### Windows PowerShell note
When running `tests.cmd` from PowerShell, pass JVM `-D...` arguments via stop-parsing mode to avoid argument mangling:
```powershell
./tests.cmd --% -Dintellij.build.test.patterns=com.example.MyTest
```
Without `--%`, PowerShell can alter `-D...` arguments before they reach `tests.cmd`, which may lead to errors like `Could not find or load main class ...`.
## Separate Bazel Modules
Some parts of the repository are standalone Bazel modules and must not use `tests.cmd` or `community/tests.cmd`.
### `community/platform/build-scripts/bazel`
- This directory is a separate Bazel module.
- Tests in this module **must be run via Bazel from that directory**.
- Use the command documented in `community/platform/build-scripts/bazel/README.md`:
```bash
cd community/platform/build-scripts/bazel
../../../../bazel.cmd test //:bazel-generator-integration-tests --test_output=all
```
- Do **not** use `./tests.cmd` for `org.jetbrains.intellij.build.bazel.BazelGeneratorIntegrationTests` or other tests in that module.
- If a request touches files under `community/platform/build-scripts/bazel`, prefer that module-local `../../../../bazel.cmd test` flow for verification.
## How tests.cmd Works
1. `tests.cmd` is a cross-platform script (works on Windows/Linux/macOS)
2. It takes `--module` and `--test`, maps them to JVM properties, and calls `bazel run //build:local_idea_ultimate_run_tests_build_target`
3. The test runner uses JUnit to execute the specified test classes
**Troubleshooting test discovery:**
- Bazel incremental compilation works correctly — remote caches do NOT cause staleness, don't waste time on `bazel clean`
- Test discovery issues are typically caused by:
1. Wrong test pattern (use FQN or wildcard, not simple class name)
2. Wrong module
3. Test class not in the correct test module's classpath
For deeper troubleshooting, see [TESTING-internals.md](../testing-internals/SKILL.md).
## tests.cmd Parameters
```
Usage: tests.cmd --module <module> --test <pattern> [options]
Required:
--module <module> Name of the JPS module which contains the test classes
--test <pattern> Full test class name (FQN) or wild card pattern (e.g. com.intellij.*Test) or exact FQN#methodName
Options:
--debug Debug build scripts JVM process
--help Show this help message
Additional options are passed as JVM flags to org.jetbrains.intellij.build.TestingOptions
Example: -Dintellij.build.test.debug.enabled=true -Dintellij.build.test.debug.suspend=true -Dintellij.build.test.debug.port=5005
```
### Additional JVM options
Extra `-D...` arguments are passed through as JVM flags to `org.jetbrains.intellij.build.TestingOptions`:
**`-Dintellij.build.test.attempt.count=<n>`**
- Retry failed tests N times
- Default: 1 (no retries)
- Use 3 for flaky tests
**`-Dintellij.build.test.jvm.memory.options=<options>`**
- Custom JVM memory options for the test process
- Example: `-Xmx8g` for 8GB heap
**`-Dpass.<property>=<value>`**
- Pass arbitrary system properties to the test JVM
- The `pass.` prefix is stripped, so `-Dpass.my.flag=true` becomes `-Dmy.flag=true` in the test JVM
**Debugging:** `-Dintellij.build.test.debug.enabled=true -Dintellij.build.test.debug.port=5005 -Dintellij.build.test.debug.suspend=true` — attach IDE debugger to port 5005.
## Troubleshooting
**Tests fail with OutOfMemoryError:**
- Increase heap size: `-Dintellij.build.test.jvm.memory.options=-Xmx8g`
- Check for memory leaks in test code
**Tests not found:**
- Verify `--test` uses FQN or wildcard, not simple class name: `--test com.example.MyTest`
- Check that `--module` is the module that actually contains the test class (look at the .iml file location)
- Check that class name ends with `Test` (or use `-Dpass.idea.include.unconventionally.named.tests=true`)
- Before troubleshooting further, check whether the test lives in a separate Bazel module such as `community/platform/build-scripts/bazel`; those tests must be run with module-local `../../../../bazel.cmd test`, not `tests.cmd`
**Tests pass locally but fail in CI:**
- Check test isolation - tests may depend on execution order
- Verify environment variables and system properties
- Use `-Dintellij.build.test.attempt.count=3` for flaky tests
**Bazel build fails before tests run:**
- Check module dependencies in `.iml` file
- Consult [module-dependencies.md](../module-dependencies/SKILL.md)
For deeper troubleshooting, see [TESTING-internals.md](../testing-internals/SKILL.md).
## Test Execution Internals
For detailed information about how `tests.cmd` works internally, including:
- Execution flow diagrams
- Key classes reference
- TestingOptions properties
- Bazel target configuration
- Test discovery flow
See [TESTING-internals.md](../testing-internals/SKILL.md)
## Writing Tests
For guidelines on **writing** tests (as opposed to running them), see the guidelines:
- [Writing Tests](../writing-tests/SKILL.md) - How to write tests, always consult before writing new tests
## Additional Resources
- [Running and Testing Documentation](../../../../docs/IntelliJ-Platform/2_Running-and-Testing)
- [Community README](../../../../community/README.md)
- [Main README](../../../../README.md)
- [Driver UI testing](../driver-ui-tests/SKILL.md)
在 GitHub 查看