blob: a6b11b5a3e737608cff26af5db547a27b778af29 [file] [log] [blame]
<!doctype html><html lang=en class=no-js><head><meta name=ROBOTS content="INDEX, FOLLOW"><link rel=canonical href=https://dubbo.apache.org/en/latest/contribution-guidelines/contributor/test-coverage-guide_dev/><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.117.0"><link rel="shortcut icon" type=image/png href=/imgs/favicon.png><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=manifest href=/manifest.webmanifest><title>测试覆盖率向导 | Apache Dubbo</title><meta property="og:title" content="测试覆盖率向导"><meta property="og:description" content="写单元测试的收益 单元测试能帮助每个人深入代码细节,了解代码的功能。 通过测试用例我们能发现bug,并提交代码的健壮性。 测试用例同时也是代码的demo用法。 单元测试用例的一些设计原则 应该精心设计好步骤,颗粒度和组合条件。 注意边界条件。 单元测试也应该好好设计,不要写无用的代码。 当你发现一个方法很难写单元测试时,如果可以确认这个方法是臭代码,那么就和开发者一起重构它。 Dubbo中用的mock框架是: mockito. 下面是一些开发向导:mockito tutorial,mockito refcard TDD(可选):当你开始写一个新的功能时,你可以试着先写测试用例。 测试覆盖率设定值 在现阶段,Delta更改代码的测试覆盖设定值为:>=60%,越高越好。 我们可以在这个页面中看到测试报告: https://codecov.io/gh/apache/dubbo "><meta property="og:type" content="article"><meta property="og:url" content="https://dubbo.apache.org/en/latest/contribution-guidelines/contributor/test-coverage-guide_dev/"><meta property="article:section" content="latest"><meta property="article:modified_time" content="2022-08-07T00:02:07+08:00"><meta itemprop=name content="测试覆盖率向导"><meta itemprop=description content="写单元测试的收益 单元测试能帮助每个人深入代码细节,了解代码的功能。 通过测试用例我们能发现bug,并提交代码的健壮性。 测试用例同时也是代码的demo用法。 单元测试用例的一些设计原则 应该精心设计好步骤,颗粒度和组合条件。 注意边界条件。 单元测试也应该好好设计,不要写无用的代码。 当你发现一个方法很难写单元测试时,如果可以确认这个方法是臭代码,那么就和开发者一起重构它。 Dubbo中用的mock框架是: mockito. 下面是一些开发向导:mockito tutorial,mockito refcard TDD(可选):当你开始写一个新的功能时,你可以试着先写测试用例。 测试覆盖率设定值 在现阶段,Delta更改代码的测试覆盖设定值为:>=60%,越高越好。 我们可以在这个页面中看到测试报告: https://codecov.io/gh/apache/dubbo "><meta itemprop=dateModified content="2022-08-07T00:02:07+08:00"><meta itemprop=wordCount content="19"><meta itemprop=keywords content><meta name=twitter:card content="summary"><meta name=twitter:title content="测试覆盖率向导"><meta name=twitter:description content="写单元测试的收益 单元测试能帮助每个人深入代码细节,了解代码的功能。 通过测试用例我们能发现bug,并提交代码的健壮性。 测试用例同时也是代码的demo用法。 单元测试用例的一些设计原则 应该精心设计好步骤,颗粒度和组合条件。 注意边界条件。 单元测试也应该好好设计,不要写无用的代码。 当你发现一个方法很难写单元测试时,如果可以确认这个方法是臭代码,那么就和开发者一起重构它。 Dubbo中用的mock框架是: mockito. 下面是一些开发向导:mockito tutorial,mockito refcard TDD(可选):当你开始写一个新的功能时,你可以试着先写测试用例。 测试覆盖率设定值 在现阶段,Delta更改代码的测试覆盖设定值为:>=60%,越高越好。 我们可以在这个页面中看到测试报告: https://codecov.io/gh/apache/dubbo "><script async src="https://www.googletagmanager.com/gtag/js?id=G-1TFHM5YBH0"></script>
<script>var doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link rel=preload href=/scss/main.min.fe7176cbe3102a33d3e8c0c9cec61eb52508abd24a2cc1ae23ccf535a481ffde.css as=style><link href=/scss/main.min.fe7176cbe3102a33d3e8c0c9cec61eb52508abd24a2cc1ae23ccf535a481ffde.css rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin=anonymous></script>
<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta name=theme-color content="#326ce5"><link rel=stylesheet href=/css/feature-states.css><meta name=description content="写单元测试的收益 单元测试能帮助每个人深入代码细节,了解代码的功能。 通过测试用例我们能发现bug,并提交代码的健壮性。 测试用例同时也是代码的demo用法。 单元测试用例的一些设计原则 应该精心设计好步骤,颗粒度和组合条件。 注意边界条件。 单元测试也应该好好设计,不要写无用的代码。 当你发现一个方法很难写单元测试时,如果可以确认这个方法是臭代码,那么就和开发者一起重构它。 Dubbo中用的mock框架是: mockito. 下面是一些开发向导:mockito tutorial,mockito refcard TDD(可选):当你开始写一个新的功能时,你可以试着先写测试用例。 测试覆盖率设定值 在现阶段,Delta更改代码的测试覆盖设定值为:>=60%,越高越好。 我们可以在这个页面中看到测试报告: https://codecov.io/gh/apache/dubbo "><meta property="og:description" content="写单元测试的收益 单元测试能帮助每个人深入代码细节,了解代码的功能。 通过测试用例我们能发现bug,并提交代码的健壮性。 测试用例同时也是代码的demo用法。 单元测试用例的一些设计原则 应该精心设计好步骤,颗粒度和组合条件。 注意边界条件。 单元测试也应该好好设计,不要写无用的代码。 当你发现一个方法很难写单元测试时,如果可以确认这个方法是臭代码,那么就和开发者一起重构它。 Dubbo中用的mock框架是: mockito. 下面是一些开发向导:mockito tutorial,mockito refcard TDD(可选):当你开始写一个新的功能时,你可以试着先写测试用例。 测试覆盖率设定值 在现阶段,Delta更改代码的测试覆盖设定值为:>=60%,越高越好。 我们可以在这个页面中看到测试报告: https://codecov.io/gh/apache/dubbo "><meta name=twitter:description content="写单元测试的收益 单元测试能帮助每个人深入代码细节,了解代码的功能。 通过测试用例我们能发现bug,并提交代码的健壮性。 测试用例同时也是代码的demo用法。 单元测试用例的一些设计原则 应该精心设计好步骤,颗粒度和组合条件。 注意边界条件。 单元测试也应该好好设计,不要写无用的代码。 当你发现一个方法很难写单元测试时,如果可以确认这个方法是臭代码,那么就和开发者一起重构它。 Dubbo中用的mock框架是: mockito. 下面是一些开发向导:mockito tutorial,mockito refcard TDD(可选):当你开始写一个新的功能时,你可以试着先写测试用例。 测试覆盖率设定值 在现阶段,Delta更改代码的测试覆盖设定值为:>=60%,越高越好。 我们可以在这个页面中看到测试报告: https://codecov.io/gh/apache/dubbo "><meta property="og:url" content="https://dubbo.apache.org/en/latest/contribution-guidelines/contributor/test-coverage-guide_dev/"><meta property="og:title" content="测试覆盖率向导"><meta name=twitter:title content="测试覆盖率向导"><meta name=twitter:image:alt content="Apache Dubbo"><meta property="og:type" content="article"><meta name=viewport content="width=device-width"><script async defer src=/js/github-buttons.js></script>
<link href=/css/community.css rel=stylesheet><link href=/css/contactus.css rel=stylesheet><link href=/css/language.css rel=stylesheet><script src=/js/script.js></script></head><body class="td-page td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a class=navbar-brand href=/en/><span class=navbar-logo></span><span class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="td-navbar-nav-scroll ml-md-auto" id=main_navbar><ul class="navbar-nav mt-2 mt-lg-0"><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/overview/><span>Overview</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/docs3-v2/><span>SDK Manual</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/blog/><span>Blog</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/download/><span>Download</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=https://start.dubbo.apache.org/bootstrap.html target=_blank><span>Initializer</span><i class='fas fa-external-link-alt'></i></a></li><li class="nav-item dropdown mr-4 d-none d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=true aria-expanded=false>Versions</a><div class="dropdown-menu dropdown-menu-right" aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=/releases>Release Information</a>
<a class=dropdown-item href=https://dubbo.apache.org/en/latest/contribution-guidelines/contributor/test-coverage-guide_dev/>Java-3.3</a>
<a class=dropdown-item href=https://v3-2.dubbo.apache.org/en/latest/contribution-guidelines/contributor/test-coverage-guide_dev/>Java-3.2</a>
<a class=dropdown-item href=https://dubbo.apache.org/en/latest/contribution-guidelines/contributor/test-coverage-guide_dev/>Go-3.1</a>
<a class=dropdown-item href=https://dubbo.apache.org/en/latest/contribution-guidelines/contributor/test-coverage-guide_dev/>Nodejs-0.1</a>
<a class=dropdown-item href=https://dubbo.apache.org/en/latest/contribution-guidelines/contributor/test-coverage-guide_dev/>Web-0.1</a>
<a class=dropdown-item href=https://dubbo.apache.org/en/latest/contribution-guidelines/contributor/test-coverage-guide_dev/>Rust-0.1</a></div></li><li class="nav-item dropdown d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdownMenuLink role=button data-toggle=dropdown aria-haspopup=true aria-expanded=false>English</a><div class="dropdown-menu dropdown-menu-right" aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=/zh-cn/>中文</a></div></li><li class="nav-item dropdown d-lg-block"><div class="nav-item d-none d-lg-block"><div id=docsearch></div></div></li></ul></div></nav><div lang=en id=announcement style='background-color:#3371e3;color:#fff; "background-image: linear-gradient(to right, #073476, #002b76, #022274, #0b1772, #16066e);"'><aside><div class=announcement-main data-nosnippet><h4><img alt=ApacheCon-Asia src=/imgs/contacts/wechat-account.jpg style=float:right;width:10%;height:auto>
<a href=/zh-cn/blog/2023/08/25/coc-asia-2023-大会精彩回顾/>Community over Code Asia 2023</a> highlights!</h4><p>Community Over Code 2023, also known as ApacheCon Asia was successfully held in 18-20 Aug in Beijing!</p></div></aside></div><section class="header-hero text-white pb-0 light-text"></section></header><div class="container-fluid td-outer"><div class=td-main><div class="row flex-md-nowrap"><div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none"><script>$(function(){$("#td-section-nav a").removeClass("active"),$("#td-section-nav #m-enlatestcontribution-guidelinescontributortest-coverage-guide_dev").addClass("active"),$("#td-section-nav #m-enlatestcontribution-guidelinescontributortest-coverage-guide_dev-li span").addClass("td-sidebar-nav-active-item"),$("#td-section-nav #m-enlatestcontribution-guidelinescontributortest-coverage-guide_dev").parents("li").addClass("active-path"),$("#td-section-nav li.active-path").addClass("show"),$("#td-section-nav li.active-path").children("input").prop("checked",!0),$("#td-section-nav #m-enlatestcontribution-guidelinescontributortest-coverage-guide_dev-li").siblings("li").addClass("show"),$("#td-section-nav #m-enlatestcontribution-guidelinescontributortest-coverage-guide_dev-li").children("ul").children("li").addClass("show"),$("#td-sidebar-menu").toggleClass("d-none")})</script><div id=td-sidebar-menu class="td-sidebar__inner d-none"><div id=content-mobile><form class="td-sidebar__search d-flex align-items-center"><div id=docsearch></div><button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav foldable-nav" id=td-section-nav><ul class="td-sidebar-nav__section pr-md-3 ul-0"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatest-li><ul class=ul-1><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestadmin-li><input type=checkbox id=m-enlatestadmin-check>
<label for=m-enlatestadmin-check><a href=/en/latest/admin/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestadmin><span>admin</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestjava-sdk-li><input type=checkbox id=m-enlatestjava-sdk-check>
<label for=m-enlatestjava-sdk-check><a href=/en/latest/java-sdk/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdk><span>Dubbo Java SDK</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestjava-sdkv2x-li><input type=checkbox id=m-enlatestjava-sdkv2x-check>
<label for=m-enlatestjava-sdkv2x-check><a href=/en/latest/java-sdk/v2.x/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv2x><span>v2.x</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestjava-sdkv2xintroduction-li><input type=checkbox id=m-enlatestjava-sdkv2xintroduction-check>
<label for=m-enlatestjava-sdkv2xintroduction-check><a href=/en/latest/java-sdk/v2.x/introduction/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv2xintroduction><span>Introduction</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv2xintroductionusers-li><input type=checkbox id=m-enlatestjava-sdkv2xintroductionusers-check>
<label for=m-enlatestjava-sdkv2xintroductionusers-check><a href=/en/latest/java-sdk/v2.x/introduction/users/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestjava-sdkv2xintroductionusers><span>Users</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestjava-sdkv2xquick-start-li><input type=checkbox id=m-enlatestjava-sdkv2xquick-start-check>
<label for=m-enlatestjava-sdkv2xquick-start-check><a href=/en/latest/java-sdk/v2.x/quick-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv2xquick-start><span>Quick start</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv2xquick-startquick-start-li><input type=checkbox id=m-enlatestjava-sdkv2xquick-startquick-start-check>
<label for=m-enlatestjava-sdkv2xquick-startquick-start-check><a href=/en/latest/java-sdk/v2.x/quick-start/quick-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestjava-sdkv2xquick-startquick-start><span>快速开始</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestjava-sdkv2xconcepts-and-architecture-li><input type=checkbox id=m-enlatestjava-sdkv2xconcepts-and-architecture-check>
<label for=m-enlatestjava-sdkv2xconcepts-and-architecture-check><a href=/en/latest/java-sdk/v2.x/concepts-and-architecture/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv2xconcepts-and-architecture><span>Concepts & Architecture</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv2xconcepts-and-architectureusers-li><input type=checkbox id=m-enlatestjava-sdkv2xconcepts-and-architectureusers-check>
<label for=m-enlatestjava-sdkv2xconcepts-and-architectureusers-check><a href=/en/latest/java-sdk/v2.x/concepts-and-architecture/users/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestjava-sdkv2xconcepts-and-architectureusers><span>用户列表</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv2xadvanced-features-and-usage-li><input type=checkbox id=m-enlatestjava-sdkv2xadvanced-features-and-usage-check>
<label for=m-enlatestjava-sdkv2xadvanced-features-and-usage-check><a href=/en/latest/java-sdk/v2.x/advanced-features-and-usage/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv2xadvanced-features-and-usage><span>Advanced Features & Usage</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv2xreference-manual-li><input type=checkbox id=m-enlatestjava-sdkv2xreference-manual-check>
<label for=m-enlatestjava-sdkv2xreference-manual-check><a href=/en/latest/java-sdk/v2.x/reference-manual/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv2xreference-manual><span>Reference Manual</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv2xupgrades-and-compatibility-li><input type=checkbox id=m-enlatestjava-sdkv2xupgrades-and-compatibility-check>
<label for=m-enlatestjava-sdkv2xupgrades-and-compatibility-check><a href=/en/latest/java-sdk/v2.x/upgrades-and-compatibility/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv2xupgrades-and-compatibility><span>Upgrades & Compatibility</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv2xcontributing-li><input type=checkbox id=m-enlatestjava-sdkv2xcontributing-check>
<label for=m-enlatestjava-sdkv2xcontributing-check><a href=/en/latest/java-sdk/v2.x/contributing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv2xcontributing><span>Contributing</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestjava-sdkv3x-li><input type=checkbox id=m-enlatestjava-sdkv3x-check>
<label for=m-enlatestjava-sdkv3x-check><a href=/en/latest/java-sdk/v3.x/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv3x><span>v3.x</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestjava-sdkv3xintroduction-li><input type=checkbox id=m-enlatestjava-sdkv3xintroduction-check>
<label for=m-enlatestjava-sdkv3xintroduction-check><a href=/en/latest/java-sdk/v3.x/introduction/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv3xintroduction><span>Introduction</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv3xintroductionusers-li><input type=checkbox id=m-enlatestjava-sdkv3xintroductionusers-check>
<label for=m-enlatestjava-sdkv3xintroductionusers-check><a href=/en/latest/java-sdk/v3.x/introduction/users/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestjava-sdkv3xintroductionusers><span>Users</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv3xquick-start-li><input type=checkbox id=m-enlatestjava-sdkv3xquick-start-check>
<label for=m-enlatestjava-sdkv3xquick-start-check><a href=/en/latest/java-sdk/v3.x/quick-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv3xquick-start><span>Quick start</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestjava-sdkv3xconcepts-and-architecture-li><input type=checkbox id=m-enlatestjava-sdkv3xconcepts-and-architecture-check>
<label for=m-enlatestjava-sdkv3xconcepts-and-architecture-check><a href=/en/latest/java-sdk/v3.x/concepts-and-architecture/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv3xconcepts-and-architecture><span>Concepts & Architecture</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv3xconcepts-and-architectureusers-li><input type=checkbox id=m-enlatestjava-sdkv3xconcepts-and-architectureusers-check>
<label for=m-enlatestjava-sdkv3xconcepts-and-architectureusers-check><a href=/en/latest/java-sdk/v3.x/concepts-and-architecture/users/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestjava-sdkv3xconcepts-and-architectureusers><span>用户列表</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv3xadvanced-features-and-usage-li><input type=checkbox id=m-enlatestjava-sdkv3xadvanced-features-and-usage-check>
<label for=m-enlatestjava-sdkv3xadvanced-features-and-usage-check><a href=/en/latest/java-sdk/v3.x/advanced-features-and-usage/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv3xadvanced-features-and-usage><span>Advanced Features & Usage</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv3xreference-manual-li><input type=checkbox id=m-enlatestjava-sdkv3xreference-manual-check>
<label for=m-enlatestjava-sdkv3xreference-manual-check><a href=/en/latest/java-sdk/v3.x/reference-manual/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv3xreference-manual><span>Reference Manual</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv3xupgrades-and-compatibility-li><input type=checkbox id=m-enlatestjava-sdkv3xupgrades-and-compatibility-check>
<label for=m-enlatestjava-sdkv3xupgrades-and-compatibility-check><a href=/en/latest/java-sdk/v3.x/upgrades-and-compatibility/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv3xupgrades-and-compatibility><span>Upgrades & Compatibility</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestjava-sdkv3xcontributing-li><input type=checkbox id=m-enlatestjava-sdkv3xcontributing-check>
<label for=m-enlatestjava-sdkv3xcontributing-check><a href=/en/latest/java-sdk/v3.x/contributing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestjava-sdkv3xcontributing><span>Contributing</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestgolang-sdk-li><input type=checkbox id=m-enlatestgolang-sdk-check>
<label for=m-enlatestgolang-sdk-check><a href=/en/latest/golang-sdk/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestgolang-sdk><span>golang</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestpixiu-li><input type=checkbox id=m-enlatestpixiu-check>
<label for=m-enlatestpixiu-check><a href=/en/latest/pixiu/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestpixiu><span>pixiu</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestfacade-docs-li><input type=checkbox id=m-enlatestfacade-docs-check>
<label for=m-enlatestfacade-docs-check><a href=/en/latest/facade-docs/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestfacade-docs><span>Documentation</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestfacade-docswhat-li><input type=checkbox id=m-enlatestfacade-docswhat-check>
<label for=m-enlatestfacade-docswhat-check><a href=/en/latest/facade-docs/what/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestfacade-docswhat><span>What is Dubbo?</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestfacade-docswhatoverview-li><input type=checkbox id=m-enlatestfacade-docswhatoverview-check>
<label for=m-enlatestfacade-docswhatoverview-check><a href=/en/latest/facade-docs/what/overview/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestfacade-docswhatoverview><span>Introduction</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestfacade-docswhatcore-concepts-li><input type=checkbox id=m-enlatestfacade-docswhatcore-concepts-check>
<label for=m-enlatestfacade-docswhatcore-concepts-check><a href=/en/latest/facade-docs/what/core-concepts/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestfacade-docswhatcore-concepts><span>Core Concepts</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestfacade-docswhatecosystem-li><input type=checkbox id=m-enlatestfacade-docswhatecosystem-check>
<label for=m-enlatestfacade-docswhatecosystem-check><a href=/en/latest/facade-docs/what/ecosystem/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestfacade-docswhatecosystem><span>Dubbo Ecosystem</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestfacade-docswhy-li><input type=checkbox id=m-enlatestfacade-docswhy-check>
<label for=m-enlatestfacade-docswhy-check><a href=/en/latest/facade-docs/why/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestfacade-docswhy><span>Why use Dubbo?</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestfacade-docswhyadvantage-li><input type=checkbox id=m-enlatestfacade-docswhyadvantage-check>
<label for=m-enlatestfacade-docswhyadvantage-check><a href=/en/latest/facade-docs/why/advantage/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestfacade-docswhyadvantage><span>Advantage</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestfacade-docshow-li><input type=checkbox id=m-enlatestfacade-docshow-check>
<label for=m-enlatestfacade-docshow-check><a href=/en/latest/facade-docs/how/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestfacade-docshow><span>How to use Dubbo?</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestfacade-docshowquick-start-li><input type=checkbox id=m-enlatestfacade-docshowquick-start-check>
<label for=m-enlatestfacade-docshowquick-start-check><a href=/en/latest/facade-docs/how/quick-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestfacade-docshowquick-start><span>Quick Start</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestfacade-docscontact-li><input type=checkbox id=m-enlatestfacade-docscontact-check>
<label for=m-enlatestfacade-docscontact-check><a href=/en/latest/facade-docs/contact/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestfacade-docscontact><span>How to Contact the Dubbo Community?</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestdownload-li><input type=checkbox id=m-enlatestdownload-check>
<label for=m-enlatestdownload-check><a href=/en/latest/download/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestdownload><span>Download</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestnotices-li><input type=checkbox id=m-enlatestnotices-check>
<label for=m-enlatestnotices-check><a href=/en/latest/notices/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestnotices><span>Announcement</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestnoticessecurity-li><input type=checkbox id=m-enlatestnoticessecurity-check>
<label for=m-enlatestnoticessecurity-check><a href=/en/latest/notices/security/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestnoticessecurity><span>安全漏洞</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcommunity-li><input type=checkbox id=m-enlatestcommunity-check>
<label for=m-enlatestcommunity-check><a href=/en/latest/community/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestcommunity><span>Community</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestcontribution-guidelines-li><input type=checkbox id=m-enlatestcontribution-guidelines-check>
<label for=m-enlatestcontribution-guidelines-check><a href=/en/latest/contribution-guidelines/ title="Dubbo Contribution Guidelines" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestcontribution-guidelines><span>Contribution</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestcontribution-guidelinescontributor-li><input type=checkbox id=m-enlatestcontribution-guidelinescontributor-check>
<label for=m-enlatestcontribution-guidelinescontributor-check><a href=/en/latest/contribution-guidelines/contributor/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestcontribution-guidelinescontributor><span>Contributor Guidelines</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcontribution-guidelinescontributorbecome-a-committer_dev-li><input type=checkbox id=m-enlatestcontribution-guidelinescontributorbecome-a-committer_dev-check>
<label for=m-enlatestcontribution-guidelinescontributorbecome-a-committer_dev-check><a href=/en/latest/contribution-guidelines/contributor/become-a-committer_dev/ title="如何成为 Dubbo Committer" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestcontribution-guidelinescontributorbecome-a-committer_dev><span>成为 Committer</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcontribution-guidelinescontributorcla-signing-guide_dev-li><input type=checkbox id=m-enlatestcontribution-guidelinescontributorcla-signing-guide_dev-check>
<label for=m-enlatestcontribution-guidelinescontributorcla-signing-guide_dev-check><a href=/en/latest/contribution-guidelines/contributor/cla-signing-guide_dev/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestcontribution-guidelinescontributorcla-signing-guide_dev><span>CLA 签署向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcontribution-guidelinescontributornew-contributor-guide_dev-li><input type=checkbox id=m-enlatestcontribution-guidelinescontributornew-contributor-guide_dev-check>
<label for=m-enlatestcontribution-guidelinescontributornew-contributor-guide_dev-check><a href=/en/latest/contribution-guidelines/contributor/new-contributor-guide_dev/ title=新贡献者向导 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestcontribution-guidelinescontributornew-contributor-guide_dev><span>新手向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcontribution-guidelinescontributormailing-list-subscription-guide_dev-li><input type=checkbox id=m-enlatestcontribution-guidelinescontributormailing-list-subscription-guide_dev-check>
<label for=m-enlatestcontribution-guidelinescontributormailing-list-subscription-guide_dev-check><a href=/en/latest/contribution-guidelines/contributor/mailing-list-subscription-guide_dev/ title=邮件列表订阅向导 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestcontribution-guidelinescontributormailing-list-subscription-guide_dev><span>邮件组向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcontribution-guidelinescontributorreporting-security-issues_dev-li><input type=checkbox id=m-enlatestcontribution-guidelinescontributorreporting-security-issues_dev-check>
<label for=m-enlatestcontribution-guidelinescontributorreporting-security-issues_dev-check><a href=/en/latest/contribution-guidelines/contributor/reporting-security-issues_dev/ title=报告安全问题 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestcontribution-guidelinescontributorreporting-security-issues_dev><span>反馈漏洞</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcontribution-guidelinescontributorsoftware-donation-guide_dev-li><input type=checkbox id=m-enlatestcontribution-guidelinescontributorsoftware-donation-guide_dev-check>
<label for=m-enlatestcontribution-guidelinescontributorsoftware-donation-guide_dev-check><a href=/en/latest/contribution-guidelines/contributor/software-donation-guide_dev/ title=软件捐献向导 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestcontribution-guidelinescontributorsoftware-donation-guide_dev><span>捐献向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcontribution-guidelinescontributordubbo-extension-guide_dev-li><input type=checkbox id=m-enlatestcontribution-guidelinescontributordubbo-extension-guide_dev-check>
<label for=m-enlatestcontribution-guidelinescontributordubbo-extension-guide_dev-check><a href=/en/latest/contribution-guidelines/contributor/dubbo-extension-guide_dev/ title="扩展 Dubbo 向导" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestcontribution-guidelinescontributordubbo-extension-guide_dev><span>扩展 Dubbo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcontribution-guidelinescontributortest-coverage-guide_dev-li><input type=checkbox id=m-enlatestcontribution-guidelinescontributortest-coverage-guide_dev-check>
<label for=m-enlatestcontribution-guidelinescontributortest-coverage-guide_dev-check><a href=/en/latest/contribution-guidelines/contributor/test-coverage-guide_dev/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestcontribution-guidelinescontributortest-coverage-guide_dev><span>测试覆盖率向导</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enlatestcontribution-guidelinescommitter-li><input type=checkbox id=m-enlatestcontribution-guidelinescommitter-check>
<label for=m-enlatestcontribution-guidelinescommitter-check><a href=/en/latest/contribution-guidelines/committer/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enlatestcontribution-guidelinescommitter><span>Committer Guidelines</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcontribution-guidelinescommitternew-committer-guide_dev-li><input type=checkbox id=m-enlatestcontribution-guidelinescommitternew-committer-guide_dev-check>
<label for=m-enlatestcontribution-guidelinescommitternew-committer-guide_dev-check><a href=/en/latest/contribution-guidelines/committer/new-committer-guide_dev/ title="Apache 提交者注册流程" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestcontribution-guidelinescommitternew-committer-guide_dev><span>注册流程</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcontribution-guidelinescommitterrelease-guide_dev-li><input type=checkbox id=m-enlatestcontribution-guidelinescommitterrelease-guide_dev-check>
<label for=m-enlatestcontribution-guidelinescommitterrelease-guide_dev-check><a href=/en/latest/contribution-guidelines/committer/release-guide_dev/ title="如何准备 Apache Release" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestcontribution-guidelinescommitterrelease-guide_dev><span>发版准备</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcontribution-guidelinescommitterwebsite-guide_dev-li><input type=checkbox id=m-enlatestcontribution-guidelinescommitterwebsite-guide_dev-check>
<label for=m-enlatestcontribution-guidelinescommitterwebsite-guide_dev-check><a href=/en/latest/contribution-guidelines/committer/website-guide_dev/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestcontribution-guidelinescommitterwebsite-guide_dev><span>网站向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcontribution-guidelinescommitterlabel-an-issue-guide_dev-li><input type=checkbox id=m-enlatestcontribution-guidelinescommitterlabel-an-issue-guide_dev-check>
<label for=m-enlatestcontribution-guidelinescommitterlabel-an-issue-guide_dev-check><a href=/en/latest/contribution-guidelines/committer/label-an-issue-guide_dev/ title=给问题打标签 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestcontribution-guidelinescommitterlabel-an-issue-guide_dev><span>问题标签</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enlatestcontribution-guidelinescommitterapache-dubbo-page_dev-li><input type=checkbox id=m-enlatestcontribution-guidelinescommitterapache-dubbo-page_dev-check>
<label for=m-enlatestcontribution-guidelinescommitterapache-dubbo-page_dev-check><a href=/en/latest/contribution-guidelines/committer/apache-dubbo-page_dev/ title="官方 Dubbo 主页的维护" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enlatestcontribution-guidelinescommitterapache-dubbo-page_dev><span>官方主页</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=https://dubbo.apache.org/en/latest/>Latests</a></li><li class=breadcrumb-item><a href=https://dubbo.apache.org/en/latest/contribution-guidelines/>Contribution</a></li><li class=breadcrumb-item><a href=https://dubbo.apache.org/en/latest/contribution-guidelines/contributor/>Contributor Guidelines</a></li><li class="breadcrumb-item active" aria-current=page><a href=https://dubbo.apache.org/en/latest/contribution-guidelines/contributor/test-coverage-guide_dev/ aria-disabled=true class="btn-link disabled">测试覆盖率向导</a></li></ol></nav><div class=td-content><h1>测试覆盖率向导</h1><header class=article-meta></header><h3 id=写单元测试的收益>写单元测试的收益</h3><ul><li>单元测试能帮助每个人深入代码细节,了解代码的功能。</li><li>通过测试用例我们能发现bug,并提交代码的健壮性。</li><li>测试用例同时也是代码的demo用法。</li></ul><h3 id=单元测试用例的一些设计原则>单元测试用例的一些设计原则</h3><ul><li>应该精心设计好步骤,颗粒度和组合条件。</li><li>注意边界条件。</li><li>单元测试也应该好好设计,不要写无用的代码。</li><li>当你发现一个<code>方法</code>很难写单元测试时,如果可以确认这个<code>方法</code><code>臭代码</code>,那么就和开发者一起重构它。</li><li>Dubbo中用的mock框架是: <a href=http://site.mockito.org/>mockito</a>. 下面是一些开发向导:<a href=https://www.baeldung.com/bdd-mockito>mockito tutorial</a>,<a href=https://dzone.com/refcardz/mockito>mockito refcard</a></li><li>TDD(可选):当你开始写一个新的功能时,你可以试着先写测试用例。</li></ul><h3 id=测试覆盖率设定值>测试覆盖率设定值</h3><ul><li>在现阶段,Delta更改代码的测试覆盖设定值为:>=60%,越高越好。</li><li>我们可以在这个页面中看到测试报告: <a href=https://codecov.io/gh/apache/dubbo>https://codecov.io/gh/apache/dubbo</a></li></ul><div id=pre-footer><h2>Feedback</h2><p class=feedback--prompt>Was this page helpful?</p><button class="btn btn-primary mb-4 feedback--yes">Yes</button>
<button class="btn btn-primary mb-4 feedback--no">No</button></div><script>const yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled"),no.disabled=!0,no.classList.add("feedback--button__disabled")};yes.addEventListener("click",()=>{sendFeedback(1),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")}),no.addEventListener("click",()=>{sendFeedback(0),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")})</script><br><div class="text-muted mt-5 pt-3 border-top">Last modified August 7, 2022: <a href=https://github.com/apache/dubbo-website/commit/dbbf5dfe9c153f9bca07aa51a8efe6f84f9ee3e0>Fix broken links & Add link checker (#1339) (dbbf5dfe9c)</a></div></div></main><div class="d-none d-xl-block col-xl-2 td-toc d-print-none"><div class="td-page-meta ml-2 pb-1 pt-2 mb-0"><a href=https://github.com/apache/dubbo-website/edit/master/content/en/latest/contribution-guidelines/contributor/test-coverage-guide_dev.md target=_blank><i class="fa fa-edit fa-fw"></i> Edit this page</a>
<a href="https://github.com/apache/dubbo-website/new/master/content/en/latest/contribution-guidelines/contributor/test-coverage-guide_dev.md?filename=change-me.md&amp;value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" target=_blank><i class="fa fa-edit fa-fw"></i> Create child page</a>
<a href="https://github.com/apache/dubbo-website/issues/new?title=%e6%b5%8b%e8%af%95%e8%a6%86%e7%9b%96%e7%8e%87%e5%90%91%e5%af%bc" target=_blank><i class="fab fa-github fa-fw"></i> Create an issue</a>
<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i> Create project issue</a></div><nav id=TableOfContents><ul><li><ul><li><a href=#写单元测试的收益>写单元测试的收益</a></li><li><a href=#单元测试用例的一些设计原则>单元测试用例的一些设计原则</a></li><li><a href=#测试覆盖率设定值>测试覆盖率设定值</a></li></ul></li></ul></nav></div></div></div></div><footer class="bg-dark py-5 row d-print-none footer-margin-0"><div class="container-fluid mx-sm-5"><div class=row><div class="col-6 col-sm-4 text-xs-center order-sm-2"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Dubbo mailing list archive" aria-label="Dubbo mailing list archive"><a class=text-white target=_blank rel="noopener noreferrer" href=https://lists.apache.org/list.html?dev@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-6 col-sm-4 text-right text-xs-center order-sm-3"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=GitHub aria-label=GitHub><a class=text-white target=_blank rel="noopener noreferrer" href=https://github.com/apache/dubbo><i class="fab fa-github"></i></a></li><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Subscribe to mailing list" aria-label="Subscribe to mailing list"><a class=text-white target=_blank rel="noopener noreferrer" href=mailto:dev-subscribe@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-12 col-sm-4 text-center py-2 order-sm-2"><small class=text-white>&copy; 2023 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation. All Rights Reserved</small></div></div></div></footer><div class="row pt-2 pb-2 footer-margin-0"><div class="container-fluid mx-sm-5"><div class=text-center id=my-footer><img style=float:left alt=apache_logo src=/imgs/apache_logo.png><ul><li><a href=https://www.apache.org>Foundation</a></li><li><a href=https://www.apache.org/licenses/>License</a></li><li><a href=https://www.apache.org/security/>Security</a></li><li><a href=https://www.apache.org/events/current-event>Events</a></li><li><a href=https://www.apache.org/foundation/sponsorship.html>Sponsorship</a></li><li><a href=https://privacy.apache.org/policies/privacy-policy-public.html>Privacy</a></li><li><a href=https://www.apache.org/foundation/thanks.html>Thanks</a></li></ul></div></div></div><script src=/js/popper.min.js integrity=sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49 crossorigin=anonymous></script>
<script src=/js/bootstrap.min.js integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy crossorigin=anonymous></script>
<script src=/js/main.min.a4534a01940be8c082c4c0e6777b61df9884f202b61c9519352adb6d1039d5aa.js integrity="sha256-pFNKAZQL6MCCxMDmd3th35iE8gK2HJUZNSrbbRA51ao=" crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/@docsearch/js@3></script>
<script>docsearch({appId:"L5F4T9F0I1",apiKey:"364ae307e1da9d02b2335675e9db1eb1",indexName:"apache_dubbo",container:"#docsearch",debug:!1}),docsearch({appId:"L5F4T9F0I1",apiKey:"364ae307e1da9d02b2335675e9db1eb1",indexName:"apache_dubbo",container:"#docsearch_zh_home",debug:!1})</script></body></html>