1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        《ASP.NET Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第9章)-- 讀書(shū)筆記(上)

        共 4303字,需瀏覽 9分鐘

         ·

        2020-08-21 06:29

        第 9 章 測(cè)試和文檔

        9.1 測(cè)試

        測(cè)試是軟件生命周期中的一個(gè)非常重要的階段,對(duì)于保證軟件的可靠性具有極其重要的意義

        常見(jiàn)的測(cè)試方法有很多,根據(jù)不同的維度,可以把測(cè)試方法分為不同的類別

        從觀察結(jié)構(gòu)的透明性方式上,分為白盒測(cè)試、黑盒測(cè)試和灰盒測(cè)試

        從測(cè)試執(zhí)行方式上,分為手動(dòng)測(cè)試和自動(dòng)化測(cè)試

        從測(cè)試所涉及的層次上,分為單元測(cè)試、集成測(cè)試和系統(tǒng)測(cè)試

        單元測(cè)試由開(kāi)發(fā)人員完成,主要用來(lái)測(cè)試程序中的類以及其中的方法是否能夠正確運(yùn)行

        在添加單元測(cè)試方法時(shí),應(yīng)遵循 Arrange-Act-Access 模式,使測(cè)試方法的代碼更加規(guī)范,該模式指明了每個(gè)測(cè)試方法由以下3部分組成:

        • Arrange:為測(cè)試進(jìn)行準(zhǔn)備操作,如設(shè)置測(cè)試數(shù)據(jù)、變量和環(huán)境等

        • Act:執(zhí)行要測(cè)的方法,如調(diào)用要測(cè)試的函數(shù)和方法

        • Assert:斷言測(cè)試結(jié)果,驗(yàn)證被測(cè)試方法的輸出是否與預(yù)期的結(jié)果一致

        我們使用 xUnit 測(cè)試框架,為項(xiàng)目命名為 Library.API.Testing

        項(xiàng)目創(chuàng)建完成后,將默認(rèn)的 UnitTest1.cs 刪除,并添加一個(gè)新類,名為 AuthorController_UnitTests,該類主要包含針對(duì) AuthorController 中方法的測(cè)試方法

        由于 AuthorController 的構(gòu)造函數(shù)中引用了多個(gè)其他依賴項(xiàng),如 IRepositoryWrapper 和 IMapper 等,可以使用 Moq 庫(kù)來(lái)模擬

        namespace Library.API.Testing
        {
        public class AuthorController_UnitTests
        {
        private AuthorController _authorController;
        private Mock _mockDistributedCache;
        private Mock> _mockLogger;
        private Mock _mockMapper;
        private Mock _mockRepositoryWrapper;
        private Mock _mockUrlHelper;

        public AuthorController_UnitTests()
        {
        _mockRepositoryWrapper = new Mock();
        _mockMapper = new Mock();
        _mockLogger = new Mock>();
        _mockDistributedCache = new Mock();
        _mockUrlHelper = new Mock();
        _authorController = new AuthorController(_mockMapper.Object,
        _mockRepositoryWrapper.Object,
        _mockLogger.Object,
        _mockDistributedCache.Object);

        _authorController.ControllerContext = new ControllerContext
        {
        HttpContext = new DefaultHttpContext()
        };
        }
        }
        }

        在 AuthorController 中用到了 Response 屬性,該屬性可以控制 HTTP 響應(yīng),如在 GetAuthorsAsync 方法中使用它為響應(yīng)添加了自定義消息頭

        Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetedata));

        已實(shí)例化的 AuthorController 的 Response 屬性默認(rèn)為空,通過(guò)設(shè)置 ControllerContext,使得 AuthorController 對(duì)象的 Request 和 Response 屬性將不再為空

        接下來(lái)對(duì) GetAuthorsAsync 添加測(cè)試方法

        [Fact]
        public async Task Test_GetAuthorsAsync()
        {
        // Arrange
        var author = new Author
        {
        Id = Guid.NewGuid(),
        Name = "Author Test 1",
        Email = "[email protected]"
        };

        var authorDto = new AuthorDto
        {
        Id = author.Id,
        Name = author.Name,
        Email = author.Email,
        };

        var authorList = new List {author};
        var authorDtoList = new List {authorDto};

        var parameters = new AuthorResourceParameters();
        var authors = new PagedList(authorList, totalCount: authorList.Count,
        pageNumber: parameters.PageNumber, pageSize: parameters.PageSize);

        _mockRepositoryWrapper.Setup(m => m.Author.GetAllAsync(It.IsAny()))
        .Returns(Task.FromResult(authors));
        _mockMapper.Setup(m => m.Map>(It.IsAny>()))
        .Returns(authorDtoList);
        _mockUrlHelper.Setup(m => m.Link(It.IsAny(), It.IsAny())).Returns("demo url");
        _authorController.Url = _mockUrlHelper.Object;

        // Act
        var actionResult = await _authorController.GetAuthorsAsync(parameters);

        // Assert
        List resourceCollection = actionResult.Value;
        Assert.True(1==resourceCollection.Count);
        Assert.Equal(authorDto,resourceCollection.First());

        Assert.True(_authorController.Response.Headers.ContainsKey("X-Pagination"));
        }

        上面的測(cè)試方法遵循了 Arrange-Act-Assert 的模式

        當(dāng)數(shù)據(jù)準(zhǔn)備好后,調(diào)用待測(cè)試的方法,并得到該方法的返回值,之后使用 Assert 類提供的靜態(tài)方法來(lái)驗(yàn)證結(jié)果是否符合預(yù)期

        相關(guān)文章

        《ASP.NET Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第8章)-- 讀書(shū)筆記(尾)


        《ASP.NET Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第8章)-- 讀書(shū)筆記(下)


        《ASP.NET Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第8章)-- 讀書(shū)筆記(中)


        《ASP.NET Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第8章)-- 讀書(shū)筆記(上)


        《ASP.NET Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第7章)-- 讀書(shū)筆記(下)


        《ASP.NET Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第7章)-- 讀書(shū)筆記(中)


        《ASP.NET Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第7章)-- 讀書(shū)筆記(上)


        《ASP.NET Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第6章)-- 讀書(shū)筆記(下)


        《ASP.ENT Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第6章)-- 讀書(shū)筆記(上)


        《ASP.ENT Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第5章)-- 讀書(shū)筆記(下)


        《ASP.ENT Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第5章)-- 讀書(shū)筆記(中)


        《ASP.ENT Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第5章)-- 讀書(shū)筆記(上)


        《ASP.ENT Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第4章)-- 讀書(shū)筆記(下)


        《ASP.ENT Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- (第4章)-- 讀書(shū)筆記(上)


        《ASP.ENT Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》(第3章)-- 讀書(shū)筆記(下)


        《ASP.ENT Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》(第3章)-- 讀書(shū)筆記(中)


        《ASP.ENT Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》(第3章)-- 讀書(shū)筆記(上)


        《ASP.ENT Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- 讀書(shū)筆記(第2章)


        《ASP.ENT Core 與 RESTful API 開(kāi)發(fā)實(shí)戰(zhàn)》-- 讀書(shū)筆記(第1章)



        歡迎各位讀者加入微信群一起學(xué)習(xí)交流,
        在公眾號(hào)后臺(tái)回復(fù)“加群”即可~~


        瀏覽 79
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

          <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            放荡娇妻玩3p | 欧美成人色网 | 国产九一视频 | 亚洲秘 无码一区二区三区电影 | www.6969成人片亚洲 | 九热精品 | 91美女在线观看 | 日本乱伦性爱 | 黄片wwww | 国产黄A片免费网站免费 |