必赢亚洲手机app下载


高科学技术集团名字的原由

WIFI驱动模块

step_by_step_xUnit_Net_ABP电脑软件

  那段日子的付出一贯使用Asp.net Boilerplate
,称之为项目模板自然就有付出中常用的作用,测试框架也在里面,土牛的ABP源代码都有经过测试,很不满的是本身事先从没写过测试,不会就要去找材料搜索一下测试开发的定义。

这篇小说就是要记录一下暴发在和谐随身的Getting Started with Testing。

*  软件测试 (software
testing)
电脑软件, 描绘一种用来推动鉴定软件的不错、完整性、安全性和质量的进度,软件测试永远不可以全部的树立任意电脑软件的不利。不过,在可统计理论(总结机科学的一个支派)
一个简便的数学评释估算出下列结果:无法完全缓解所谓“死机”,指任意计算机程序是还是不是会进去死循环,或者罢工并发出输出问题。换句话说,软件测试是一种实际出口与预期输出间的审批或者正如进程。软件测试的经文定义是:在规定的规则下对先后开展操作,以发现先后错误,衡量软件质地,并对其是或不是能满意设计须要开展评估的长河。
思维实在编程中测试无处不在,没有测试我们鞭长莫及相信代码就自然可以健康履行。此前就遇上过那样的片段事假设代码写的多了,一个政工的实践操作要进行很多少个艺术,而且最终要去第三方接口拿回来数据在操作数据库,那样即使本身要验证数据和仓储方法就要走完所有工艺流程,有了单元测试这些题材就变得很好处理,单元测试
又称模块测试 是对准程序模块(软件设计的微乎其卡片机位)来开展不易检验的测试工作
。*

*  既是测试如此的关键,.NET平台下也理所当然有指向测试开发的零部件,XUNIT,[NUNIT](http://www.nunit.org/)
那些都是用于.NET 平台下的测试工具,ABP项目模板中选取了XUNIT
,于是自己也先看看
XUNIT的介绍 
 *,普通话的将来暴发来…

XUNIT
的那篇介绍写的很简短,它有Fact,Theory的笺注对章程测试,接下去的ABP项目中自我便采纳了它们。

  在ABP中我将那部分的完成放到了独自的模块中

Application , Core
,EntityFramework ,Web ,WebApi   , SACSLibrary 

下边的图是现实改写的地点:

电脑软件 1

 

 

 

在SACSLibrary中自己对SS(GDS)的极品实践举办了改写,去除了有些对脚下账号没有用处的劳务,暂时性的把REST
API 查询的那有些拿过来改写,它的REST 查询成效必要一个 SESSION LESS
,而且每一趟得到一个SESSION
它的生命周期长达七日,那就表示自己那七天的时光内假若是去做询问操作都可以用那几个相同的SESSION。那就存在一个题目何以维护SESSION从而确保每回查询操作都能正常落成?自己写服务感到有点劳累,早早听说ABP有后台工作者这几个便利的功用,看来本次可以用上了

电脑软件 2电脑软件 3

 1    [UnitOfWork]
 2         protected async override void DoWork()
 3         {
 4             Logger.Debug("------backgroundworker  begin");
 5          
 6             using (CurrentUnitOfWork.DisableFilter(AbpDataFilters.MayHaveTenant))
 7             {
 8                 var validtokens = _tokenDetailsRepository.FirstOrDefault(t => t.IsValid);
 9 
10                 if (validtokens == null || System.DateTime.Now >= validtokens.ExpirationDate)
11                 {
12                     if (validtokens != null)
13                     {
14                         validtokens.IsValid = false;
15                     }
16                     string clientid = _authorizationManager.CreateCredentialsString(_authorizationManager.CurrenConfig.UserId, _authorizationManager.CurrenConfig.Group, _authorizationManager.CurrenConfig.ClientSecret);
17                     var response = await _authorizationManager.AuthorizeAsync(clientid);
18                     TokenHolder tokenHolder;
19                     if (response.IsSuccess)
20                     {
21                         var value = response.Value;
22                         tokenHolder = TokenHolder.Valid(value.AccessToken, value.ExpiresIn);
23                         TokenDetail _td = new TokenDetail()
24                         {
25                             IsValid = true,
26                             Token = tokenHolder.Token,
27                             ExpirationDate = tokenHolder.ExpirationDate
28                         };
29                         _tokenDetailsRepository.Insert(_td);
30                         Timer.Period =(int)(_td.ExpirationDate - System.DateTime.Now).TotalMilliseconds;
31                         Logger.Debug(Timer.Period.ToString()+"之后执行");
32                     }
33                     else
34                     {
35                         tokenHolder = TokenHolder.Invalid(response.StatusCode, response.Message);
36                         _tokenDetailsRepository.Insert(new TokenDetail()
37                         {
38                             ErrorMessage = tokenHolder.ErrorMessage,
39                             ErrorStatusCode = tokenHolder.ErrorStatusCode
40                         });
41                         Timer.Period = 1000;
42                     }
43                 }
44                 else
45                 {
46                     Timer.Period = (int)(validtokens.ExpirationDate - System.DateTime.Now).TotalMilliseconds;
47                     Logger.Debug($"下次执行更新在 {Timer.Period} 毫秒之后");
48                 }
49 
50 
51             }
52 
53 
54             Logger.Debug("------backgroundworker  end");
55         }

View Code

如此近期测试自己将实施时间调的小部分足以透过,但是不领会有没有使用不当的地点。

此处边是调用获取SESSION
LESS的法子,这么些点子本身在写单元测试的类型里面测试通过。因为其中用到了仓储,然则数据库里边的数量我又从不主意用于测试,Effort(Entity
Framework Fake ObjectContext Realization Tool)
那个工具我眼前只是明白她可以MOCK,能够用来模拟操作数据库其他的并不打听了。纵然自己不清楚怎么利用原有的Effort,不过ABP封装了它那很便利我们去采纳。

测试SESSION LESS

 1         [Fact]
 2         public async void BFM_Session_LESS_Test_Create_token()
 3         {
 4             var _config = new SACS.Library.Configuration.SampleConfigProvider();
 5             var obj = Resolve<IAuthorizationManager>(new
 6             {
 7                 config = _config
 8             });
 9             string clientid = obj.CreateCredentialsString(_config.UserId, _config.Group, _config.ClientSecret);
10             var response = await obj.AuthorizeAsync(clientid);
11             TokenHolder tokenHolder;
12             if (response.IsSuccess)
13             {
14                 var value = response.Value;
15                 tokenHolder = TokenHolder.Valid(value.AccessToken, value.ExpiresIn);
16             }
17             else
18             {
19                 tokenHolder = TokenHolder.Invalid(response.StatusCode, response.Message);
20             }
21             response.IsSuccess.ShouldBe<bool>(true);
22         }

 

测试那么些MOCK Repository

 1        [Fact]
 2         public async void BFM_Session_LESS_Test_InsertToken_Reporitory()
 3         {
 4             UsingDbContext((context) =>
 5             {
 6                 context.DisableAllFilters();
 7                 context.TokenDetails.Add(new TokenDetail()
 8                 {
 9                     IsValid = true,
10                     ExpirationDate = System.DateTime.Now.AddDays(5),
11                     Token = "session_less"
12                 });
13 
14             });
15             var _repository = Resolve<IRepository<TokenDetail>>();
16             _repository.ShouldNotBeNull();
17             var backid = await _repository.InsertAndGetIdAsync(new TokenDetail()
18             {
19                 Token = "sdsdsdsdsdsdsdsdsdsdsd",
20                 IsValid = true,
21                 ExpirationDate = System.DateTime.Now.AddDays(6)
22             });
23             backid.ShouldBe(2);
24         }

测试改写从前的RestClient

 1        [Fact]
 2         public async void BFM_Query_Test_RestClient_Test()
 3         {
 4             UsingDbContext((context) =>
 5             {
 6                 context.DisableAllFilters();
 7                 context.TokenDetails.Add(new TokenDetail()
 8                 {
 9                     IsValid = true,
10                     ExpirationDate = System.DateTime.Now.AddDays(5),
11                     Token = "T1RLAQIQMgZTCKXi+NCWBKaZ0S48I4QxAKw3ZVQyGyXazuIBNnAACQJq5rbfyr1AvNa0Y/7nf+YgPh8QKen+BTOJOwB6SFs9JsvjQpeXAfZlBvvXc3Qi4amQ8SqK7DATQCDiNWcXurfd77naZwwAczgjGc1LPF1XK3AXpV7N8Z2OtN3COZIyK4vAu+SK6IdHU3p/"
12                 });
13 
14             });
15             var configs = Resolve<SACS.Library.Configuration.IConfigProvider>();
16             configs.ShouldNotBeNull();
17             var _tokendetail = Resolve<IRepository<TokenDetail>>();
18             _tokendetail.ShouldNotBeNull();
19             _tokendetail.Count().ShouldBe(1);
20             var _tokenmangager = Resolve<IAuthorizationManager>(new
21             {
22                 config = configs
23 
24             });
25 
26             _tokenmangager.ShouldNotBeNull();
27 
28             var _restclient = Resolve<RestClient>(new
29             {
30                 config = configs,
31                 tokendetailrepository = _tokendetail,
32                 restAuthorizationManager = _tokenmangager
33 
34             });
35 
36             BargainFinderMaxPostRQ _bfmpostrq = new BargainFinderMaxPostRQ()
37             {
38                //......略
49             };
50             IActivity activity = new BargainFinderMaxActivity(_restclient, _bfmpostrq);
51             Workflow workflow = new Workflow(activity);
52             SharedContext sharedContext = await workflow.RunAsync();
53             BargainFinderMaxVM model = ViewModelFactory.CreateBargainFinderMaxVM(sharedContext);
54             model.ErrorMessage.ShouldBeEmpty();
55             model.ResponseJson.ShouldNotBeNullOrEmpty();
56         }

测试改写之后的RestClient ,用Theory 特性标注并指定了多组测试数据

 1  public class BFM_Test_Data
 2     {
 3         public static IEnumerable<object[]>  BargainFinderMaxPostRQCs {
 4             get {
 5                 return new[] {
 6                     new object[] {
 7                         BFM_Query_Test_RestClient_LoadCpData1() // 略
 8                     },new object[] {
 9                         BFM_Query_Test_RestClient_LoadCpData2() //略
10                     },
11                     new object[] {
12                         BFM_Query_Test_RestClient_LoadCpData3() //略
13                     }
14                 };
15             } } 
16 }

测试方法:

        [Theory]
        [MemberData("BargainFinderMaxPostRQCs",MemberType = typeof(BFM_Test_Data))]

        public async void BFM_Query_Test_RestClient_TestCP(BargainFinderMaxPostRQCP cp)
     {
         /// ......略
     }

 电脑软件 4

 

 

好了,后日就记下到这边了。╰( ̄▽ ̄)╭

连锁的文档 :

:Using Effort -Entity Framework Unit Testing
Tool
 

:Getting Started With
XUnit.net(Destop)

:Unit Testing in C# using XUnit,Entity Framework,Effort and ASP.NET
Boilerplate

 :xUnit Theory,the Data Driven Unit
Test

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图