代碼
測試目錄兩個項目
Basket.FunctionalTests 測試功能, 需要連通第三方組建
BasketScenarios.cs 購物車功能場景測試
做法是創建一個AspNetCore 的 TestServer 並且發起Http請求,驗證正確的響應狀態碼
測試的功能點包括 Post basket , Get basket , Checkout basket , 因爲checkout 方法需要使用 Header中一個標識 ,所以擴展了一個類 HttpClientExtensions.cs 來模擬這個Header
使用了AutoAuthorizeMiddleware Mock了驗證功能 , 在構建 TestServer的時候註冊了這個 BasketTestsStartup
RedisBasketRepositoryTests.cs Redis 的功能測試
Redis的配置在 appsettings.Development.json 中配置的有
Api 目錄一個項目
Basket.API
Auth
Swagger Api的驗證
Controllers
具體購物車的一些實現,增刪改查,還有一個checkout, 這個操作會推送一條 UserCheckoutAccepted事件到消息中
Grpc
gRpc服務的實現類, 類似WCF實現契約的具體類文件 , 不過這裏沒有契約接口了, 用的Proto協議文件.
Infrastructure
ActionResult
異常返回的結果類, 這裏只標記了StatusCode 爲500
Exceptions
這裏的類沒啥用
Filters
全局異常捕獲過濾器, Model的參數驗證過濾器, 按自己的 JsonErrorReponse格式返回
Middlewares
權限驗證, 中斷中間件, 模擬手動停用,啓用服務
IntegrationEvents
EventHandling
裏面有OrderStarted 和 ProductPriceChanged 兩個事件處理類
Events
裏面有3消息實體 OrderStarted , ProductPriceChanged , UserCheckoutAccepted , 都繼承基類 Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events.EntergrationEvent , 說明垮項目被引用的一些基類都寫在了BuildingBlocks裏面
事件發佈:當用戶點擊購物車結算時,發佈用戶結算事件。
事件消費:訂單創建成功後,進行購物車的清空
事件消費:商品價格更新後,進行購物車相關商品的價格同步
Model
一些實體類文件
Proto
gRpc的Proto協議文件. VS在編譯的時候自動根據項目文件配置的類別生成和協議文件相同的Server抽象服務類或者是client調用類, 需要自己去繼承這個類並實現協議中的方法. gRpc 只能在http/2下面使用
Services
身份驗證獲取類, 從HttpContext 中獲取User信息 , 這裏封裝一了一個接口是爲了給單元測試做Mock用的.
下一個項目會分享 Ordering 服務
參考文檔
https://github.com/dotnet-architecture/eShopOnContainers/wiki/gRPC#grpc-usage-in-eshoponcontainers
https://www.cnblogs.com/sheng-jie/p/10218839.html