当前位置: 首页 > news >正文

宁波企业做网站网站和微信公众号建设

宁波企业做网站,网站和微信公众号建设,wordpress 插件 函数,wordpress菜单显示在哪里每一个Teams bot实际上就是一个web api服务#xff0c;这个服务通过Bot Framework和Teams进行通讯#xff0c;所以对于Teams app的测试就是对于一个api service的测试。 软件行业发展到如今#xff0c;测试技术已经趋于成熟。单元测试#xff0c;冒烟测试#xff0c;整合…每一个Teams bot实际上就是一个web api服务这个服务通过Bot Framework和Teams进行通讯所以对于Teams app的测试就是对于一个api service的测试。 软件行业发展到如今测试技术已经趋于成熟。单元测试冒烟测试整合测试。。。等等。那什么是Service level的测试。这里所谓的服务级的测试类似于Integration Test就是指把整个api服务看成是一个黑盒对这个服务的各个api接口作为最小单位进行测试。与Integration Test不同之处在于Service level测试更加侧重于服务本身可以尽量mock掉服务的外部依赖项。 Service Level的测试在如今微服务的时代特别实用如果使用大量的单元测试把每个class的每个方法都层层保护一旦将来改动了代码对测试代码的更新也是一个较大的工作量也就是说代码被测试限制的特别死。相反微服务的时代因为每个服务都不会非常大我们需要给代码一些改动的空间我们关心的是每个api接口对于传入的输入是否可以产生正确的输出。 而且我在使用ServiceLevel测试对我的抽奖机器人进行测试的时候能够很好的发现很多dead code就是一些永远也不会被执行到的死代码。这些代码应该会删掉保持代码的简洁。 那如何做呢ASP.NET Core早就为我们准备好了ServiceLevel测试的利器TestServer。微软官方文档里也有很多介绍如何使用TestServer来做整合测试我们来看一个最简单的例子 public class TestServerFixture : IDisposable {private readonly TestServer _testServer;public HttpClient Client { get; }public TestServerFixture(){var builder new WebHostBuilder().UseEnvironment(Development).UseStartupStartup();_testServer new TestServer(builder);Client _testServer.CreateClient();}public void Dispose(){Client.Dispose();_testServer.Dispose();} }[Fact] public async Task WhenGetMethodIsInvokedWithoutAValidToken_GetShouldAnswerUnAuthorized() {using (TestServerFixture fixture new TestServerFixture()){// Actvar response await fixture.Client.GetAsync(/api/values/5);// Assertresponse.StatusCode.Should().Be(HttpStatusCode.Unauthorized);} }当然由于LuckyDraw bot里使用到了很多Azure table storage服务我们在测试中不应该使用真实的azure storage不然多个测试用例并发执行的时候数据肯定就乱掉了而且会相互冲突导致测试结果无法预料。所以在测试的时候我们需要把api服务的外部依赖项都mock掉比如我在LuckyDraw bot里就mock了Bot connector因为在测试中我们不能也不应该真实的往teams里发送东西。 说了这么多还是上代码让大家对这个有一个更加直观的认识 [Fact] public async Task WhenEverythingIsGood_SendTextHelp_ReplyHelpMessage() {using (var server CreateServerFixture(ServerFixtureConfigurations.Default))using (var client server.CreateClient()){var response await client.SendTeamsText(atbot name/athelp);response.StatusCode.Should().Be(HttpStatusCode.OK);var createdMessages server.Assert().GetCreatedMessages();createdMessages.Should().HaveCount(1);createdMessages[0].Activity.Text.Should().StartWith(Hi there, To start a lucky draw);} }public static async TaskHttpResponseMessage SendTeamsText(this HttpClient httpClient,string text,string locale null,double? offsetHours null) {var activity new Activity{ServiceUrl https://service-url.com,ChannelId msteams,Type ActivityTypes.Message,Text text,Locale locale ?? en-us,LocalTimestamp offsetHours.HasValue ? new DateTimeOffset(2018, 1, 1, 1, 1, 1, 1, TimeSpan.FromHours(offsetHours.Value)) : (DateTimeOffset?)null,From new ChannelAccount(id, name),Recipient new ChannelAccount(bot id, bot name),Conversation new ConversationAccount(isGroup: true, id: conv id, name: conv name),ChannelData new TeamsChannelData{Tenant new TenantInfo { Id Guid.NewGuid().ToString() },Team new TeamInfo { Id Guid.NewGuid().ToString() },Channel new ChannelInfo { Id Guid.NewGuid().ToString() },}};return await httpClient.SendActivity(activity); }可以看到我们模拟了Teams的Activity把我们自己生成的一个activity传递给了我们api接口然后check了api发送给Teams的消息是不是我们想要的内容。
http://www.yutouwan.com/news/102133/

相关文章:

  • 建设银行网站首页打三亚门户
  • 西部数码网站助手教程商品推广软文写作500字
  • 网站建设与维护岗位职责wordpress 论坛app
  • 网站审核文件绍兴注册公司
  • 网站svg使用北约网络防御中心
  • 网站后台更新 前台不显示wordpress注册不发送邮件
  • 如何重启网站服务器网页游戏排行2019
  • 免费建立企业网站广西建设厅官方网站文件通知
  • 上海营销型网站建设费用wordpress 主题 恢复
  • 网站备案的幕布是什么来的网站推广优化建设
  • 做网站读什么专业外贸公司名称大全简单大气
  • 东莞行业网站建设教程章丘做网站的公司
  • 工程建设比选公告固价方式网站jquery网页设计作业
  • 成都网站建设公司地址笛东景观设计公司官网
  • 九江网站建设哪家公司好wordpress 深度优化
  • 东莞企业网站费用小程序模板下载
  • 做一个商城网站多少钱wordpress标签怎么做静态化
  • 广东华电建设股份有限公司网站明月浩空WordPress
  • 怎么做网站栏目百度上做网站推广
  • 建立网站需要分几部进行网站建设合同性质
  • 网站被人做跳转了wordpress oss静态
  • 大连网站制作的wordpress空间大小
  • 西安网站建设流程建电影网站的程序
  • 企业网站建设的基本原则技术支持 骏域网站建设专家佛山
  • 网站怎么上传模板东莞营销型网站建站
  • 怎样优化网站自然排名博物馆网站建设的目标
  • 怎么建立免费个人网站微信公众号小程序搭建
  • 西安做公司网站公司wordpress安装打不开
  • 注册建筑工程公司起名大全云南搜索引擎优化
  • 深圳建设网站服务最实用的仓库管理系统