<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 4303字,需瀏覽 9分鐘

           ·

          2020-08-21 06:29

          第 9 章 測試和文檔

          9.1 測試

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

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

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

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

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

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

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

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

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

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

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

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

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

          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)為空,通過設(shè)置 ControllerContext,使得 AuthorController 對象的 Request 和 Response 屬性將不再為空

          接下來對 GetAuthorsAsync 添加測試方法

          [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"));
          }

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

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

          相關(guān)文章

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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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



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


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

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                    <th id="afajh"><progress id="afajh"></progress></th>
                    国产免费黄色电影在线观看 | 黄片视频免费观看 | 色婷婷综合在线观看 | 操一区| 三级高清在线 |