{"id":13431865,"url":"https://github.com/xunit/xunit","last_synced_at":"2025-09-09T20:42:26.081Z","repository":{"id":38434787,"uuid":"9891249","full_name":"xunit/xunit","owner":"xunit","description":"xUnit.net is a free, open source, community-focused unit testing tool for .NET.","archived":false,"fork":false,"pushed_at":"2025-09-04T17:37:15.000Z","size":18284,"stargazers_count":4448,"open_issues_count":70,"forks_count":819,"subscribers_count":164,"default_branch":"main","last_synced_at":"2025-09-04T19:29:42.499Z","etag":null,"topics":["c-sharp","dotnet","unit-testing","xunit"],"latest_commit_sha":null,"homepage":"https://xunit.net/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xunit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2013-05-06T16:37:13.000Z","updated_at":"2025-09-02T22:37:48.000Z","dependencies_parsed_at":"2024-01-13T04:50:13.335Z","dependency_job_id":"5e77b609-d44b-4a84-a0af-1c74bfe0d672","html_url":"https://github.com/xunit/xunit","commit_stats":{"total_commits":2094,"total_committers":143,"mean_commits":"14.643356643356643","dds":"0.15090735434574976","last_synced_commit":"a8819848732d7d42e2b36cc081305754a31b9547"},"previous_names":[],"tags_count":179,"template":false,"template_full_name":null,"purl":"pkg:github/xunit/xunit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xunit%2Fxunit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xunit%2Fxunit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xunit%2Fxunit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xunit%2Fxunit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xunit","download_url":"https://codeload.github.com/xunit/xunit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xunit%2Fxunit/sbom","scorecard":{"id":1237004,"data":{"date":"2025-07-28","repo":{"name":"github.com/xunit/xunit","commit":"152c1467610e63d059b53e1190850072996160cf"},"scorecard":{"version":"v5.2.1-26-g4feedb85","commit":"4feedb857ab8d82158aa9774bf8054df41992180"},"score":4.8,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 26 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci-signed.yaml:1","Warn: no topLevel permission defined: .github/workflows/ci-unsigned.yaml:1","Warn: no topLevel permission defined: .github/workflows/pull-request.yaml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#license"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#vulnerabilities"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#binary-artifacts"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-signed.yaml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-signed.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-signed.yaml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-signed.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-signed.yaml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-signed.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-signed.yaml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-signed.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-signed.yaml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-signed.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-signed.yaml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-signed.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-signed.yaml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-signed.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-signed.yaml:83: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-signed.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-unsigned.yaml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-unsigned.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-unsigned.yaml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-unsigned.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-unsigned.yaml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-unsigned.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-unsigned.yaml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-unsigned.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-unsigned.yaml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-unsigned.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-unsigned.yaml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/ci-unsigned.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pull-request.yaml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/pull-request.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pull-request.yaml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/pull-request.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pull-request.yaml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/pull-request.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pull-request.yaml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/pull-request.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pull-request.yaml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/xunit/xunit/pull-request.yaml/main?enable=pin","Info:   0 out of  12 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-09-04T19:30:53.607Z","repository_id":38434787,"created_at":"2025-09-04T19:30:53.607Z","updated_at":"2025-09-04T19:30:53.607Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273680345,"owners_count":25148786,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-sharp","dotnet","unit-testing","xunit"],"created_at":"2024-07-31T02:01:06.572Z","updated_at":"2025-09-09T20:42:26.072Z","avatar_url":"https://github.com/xunit.png","language":"C#","readme":"# About xUnit.net\n\nxUnit.net is a free, open source, community-focused unit testing tool for C#, F#, and Visual Basic. xUnit.net v3 supports .NET 8.0 or later, and .NET Framework 4.7.2 or later.\n\nxUnit.net works with the [.NET SDK](https://dotnet.microsoft.com/download) command line tools, [Visual Studio](https://visualstudio.microsoft.com/), [Visual Studio Code](https://code.visualstudio.com/), [JetBrains Rider](https://www.jetbrains.com/rider/), [NCrunch](https://www.ncrunch.net/), and any development environment compatible with [Microsoft Testing Platform](https://learn.microsoft.com/dotnet/core/testing/microsoft-testing-platform-intro) or [VSTest](https://github.com/microsoft/vstest).\n\nxUnit.net is part of the [.NET Foundation](https://www.dotnetfoundation.org/) and operates under their [code of conduct](https://www.dotnetfoundation.org/code-of-conduct). It is licensed under [Apache 2](https://opensource.org/licenses/Apache-2.0) (an OSI approved license). The project is [governed](/governance) by a Project Lead.\n\nFor project documentation, please visit the [xUnit.net project home](https://xunit.net/).\n\n* _New to xUnit.net? Get started with the [.NET SDK](https://xunit.net/docs/getting-started/v3/getting-started)._\n* _Need some help building the source? See [BUILDING.md](https://github.com/xunit/xunit/tree/main/BUILDING.md)._\n* _Want to contribute to the project? See [CONTRIBUTING.md](https://github.com/xunit/.github/tree/main/CONTRIBUTING.md)._\n* _Want to contribute to the assertion library? See the [suggested contribution workflow](https://github.com/xunit/assert.xunit/tree/main/README.md#suggested-contribution-workflow) in the assertion library project, as it is slightly more complex due to code being spread across two GitHub repositories._\n\n[![Powered by NDepend](https://raw.github.com/xunit/media/main/powered-by-ndepend-transparent.png)](http://www.ndepend.com/)\n\n## Latest Builds\n\n|                             | Latest stable                                                                                                                            | Latest CI ([how to use](https://xunit.net/docs/using-ci-builds))                                                                                                                                                                          | Build status\n| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------\n| `xunit.v3`                  | [![](https://img.shields.io/nuget/v/xunit.v3.svg?logo=nuget)](https://www.nuget.org/packages/xunit.v3)                                   | [![](https://img.shields.io/badge/endpoint.svg?url=https://f.feedz.io/xunit/xunit/shield/xunit.v3/latest\u0026color=f58142)](https://feedz.io/org/xunit/repository/xunit/packages/xunit.v3)                                   | [![](https://img.shields.io/endpoint.svg?url=https://actions-badge.atrox.dev/xunit/xunit/badge%3Fref%3Dmain\u0026amp;label=build)](https://actions-badge.atrox.dev/xunit/xunit/goto?ref=main)\n| `xunit`                     | [![](https://img.shields.io/nuget/v/xunit.svg?logo=nuget)](https://www.nuget.org/packages/xunit)                                         | [![](https://img.shields.io/badge/endpoint.svg?url=https://f.feedz.io/xunit/xunit/shield/xunit/latest\u0026color=f58142)](https://feedz.io/org/xunit/repository/xunit/packages/xunit)                                         | [![](https://img.shields.io/endpoint.svg?url=https://actions-badge.atrox.dev/xunit/xunit/badge%3Fref%3Dv2\u0026amp;label=build)](https://actions-badge.atrox.dev/xunit/xunit/goto?ref=v2)\n| `xunit.analyzers`           | [![](https://img.shields.io/nuget/v/xunit.analyzers.svg?logo=nuget)](https://www.nuget.org/packages/xunit.analyzers)                     | [![](https://img.shields.io/badge/endpoint.svg?url=https://f.feedz.io/xunit/xunit/shield/xunit.analyzers/latest\u0026color=f58142)](https://feedz.io/org/xunit/repository/xunit/packages/xunit.analyzers)                     | [![](https://img.shields.io/endpoint.svg?url=https://actions-badge.atrox.dev/xunit/xunit.analyzers/badge%3Fref%3Dmain\u0026amp;label=build)](https://actions-badge.atrox.dev/xunit/xunit.analyzers/goto?ref=main)\n| `xunit.runner.visualstudio` | [![](https://img.shields.io/nuget/v/xunit.runner.visualstudio.svg?logo=nuget)](https://www.nuget.org/packages/xunit.runner.visualstudio) | [![](https://img.shields.io/badge/endpoint.svg?url=https://f.feedz.io/xunit/xunit/shield/xunit.runner.visualstudio/latest\u0026color=f58142)](https://feedz.io/org/xunit/repository/xunit/packages/xunit.runner.visualstudio) | [![](https://img.shields.io/endpoint.svg?url=https://actions-badge.atrox.dev/xunit/visualstudio.xunit/badge%3Fref%3Dmain\u0026amp;label=build)](https://actions-badge.atrox.dev/xunit/visualstudio.xunit/goto?ref=main)\n\n*For complete CI package lists, please visit the [feedz.io package search](https://feedz.io/org/xunit/repository/xunit/search). A free login is required.*\n\n## Sponsors\n\nHelp support this project by becoming a sponsor through [GitHub Sponsors](https://github.com/sponsors/xunit).\n","funding_links":["https://github.com/sponsors/xunit"],"categories":["Frameworks, Libraries and Tools","Test Frameworks","C# #","Testing and Mocking","C#","Libraries","框架, 库和工具","Testing","测试","Performance","🗒️ Cheatsheets"],"sub_categories":["Testing",".NET","测试","GUI - other","📦 Libraries"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxunit%2Fxunit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxunit%2Fxunit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxunit%2Fxunit/lists"}