前言:如果我们要写好我们的单元测试,可能我们要有好的布局,也要规划好如何去创建单元测试的类,单元测试的方法,下面简单的说一下。
1:分开集成测试和单元测试
如果我们把集成测试和单元测试放在一起如果出现问题可能出现的原因比较多那么我们直接进行分离,建立2套类库。如下图
2:将测试类映射到测试代码
2.1:每一个被测试的类对应一个测试类
就是在测试项目中,用被测试类的名字加上UnitTests后缀命名。如果被测试类是Login,测试项目中创建的测试类就是LoginUnitTests。这种就是每一个类一个测试类。
2.2:每个功能对应一个测试类
就是为每一个方法创建一个测试类,不过由于方法比较多,会出现大量的测试类,所以需要权衡一下,比喻项目中某些功能需要测试用例特别多那么你就需要为这单独的功能添加测试类。比喻GetAuthory这个方法的测试用例比较多,那么我们就需要单独的把他测试用例放一个类中。这时候我们需要创建2个测试类,AuthoryUnitTests_GetAuthory和AuthoryUnitTests前者包含GetAuthory的测试后者包含其他所有的测试。
3:方法怎么去命名
在单元测试中我们尽量少些注释,以至于不写,那么我们就要写出很高质量的测试名称,那么可以采取 准备对象-操作对象-断言 的模式。
准备对象:就是你要为他测试的对象,说白了就是你的方法名称比喻AddUser,DeleteUser等
操作对象:你将要对这个对象具有什么样的操作,比喻有效的用户名,无效的用户名等
断言:就是对结果做出判断,比喻这个操作会抛异常,这个操作正常,这个操作会失败,这个值会发生改变等
下面举个例子
AddUser_ValidUserInfo_ReturnsTrue
当添加一个有效的用户的时候应该返回True
AddUser_IdIsNullOrEmpty_Throws
当添加用户的时候Id会Null或者Empty的时候回抛出异常。
比喻还有些调用没有返回值但是可以看见状态的改变
Add_WhenCalled_StateChange(Add为一个例子)
就是当调用Add这个方法的时候回导致我们系统状态的改变
以上只是建议。