公司项目长期的计划中需要做自动化测试和部署,近期由于项目的推进现在需要把做单元测试先做一部分。项目是用.net core开发,前后端完全分离,前后端用API接口的方式进行业务数据流通。
为什么研究xunitTest测试的顺序呢,一方面是自己才接触单元测试,以前也没玩过这东西,另一方面是因为一开始考虑到业务方面的流程是有顺序的,接口数据的效验也是有顺序的,其实在我研究好了这个之后发现:其实虽然每个API的数据方面是有顺序的关系,单元测试并不一定是需要顺序)。
目前我们的项目有4个重要的环节,报备→带看→认购→签约这要一个顺序,一开始想着的是从报备这里产生的数据,后续3个步骤都会使用这一条数据测试,可是后来多玩了一会儿单元测试发现并不需要这样。现在进入正题如果真的需要按顺序执行单元测试的时候怎么办呢?其实很简单
第一种方法:定义显示名称
[Fact(DisplayName= "1.测试确认报备(报备ID)")]
执行顺序默认会更具显示名称执行。
第二种方法:重新定义执行顺序
1.添加排序类,继承至Xunit.Sdk.ITestCaseOrderer,实现它的排序接口
namespace XKJReportTest.PlayList
{
public class TestCaseOrderer : Xunit.Sdk.ITestCaseOrderer
{
public IEnumerable<TTestCase> OrderTestCases<TTestCase>(IEnumerable<TTestCase> testCases) where TTestCase : ITestCase
{
testCases = testCases.OrderBy(o => o.DisplayName);
return testCases;
}
}
}
接口参数 testCases 就是单元测试的所有测试用例,在这个接口里面对它进行重新排序就可以了,自己可以根据实际需求操作。
2.在测试类上面添加排序
[TestCaseOrderer("XKJReportTest.PlayList.TestCaseOrderer", "XKJReportTest")]
第一个参数排序类的名称,第二个参数是单元测试项目的名称(程序集名称)
全剧终!!!
顺便在说一下我写单元测试的思路吧:
虽然我上面截图上的几个单元测试是数据强相关的,但是最后我的处理的大概步骤是:
1.先查询本个单元测试用例(也就是这次要测试的API)可以用的数据
2.然后组合请求体
3.请求调用API的manager层,control层没有测试。
4.在去查询数据库对应表的数据来断言API功能是否正确,主要是断言各个数据表的数据条数,特别重要的数据值也会断言,比如状态之内的。