第一部分: http://www.cnblogs.com/cgzl/p/8283610.html
下面有一点点内容是重叠的....
String Assert
测试string是否相等:
[Fact] public void CalculateFullName() { var p = new Patient { FirstName = "Nick", LastName = "Carter" }; Assert.Equal("Nick Carter", p.FullName); }
然后你需要Build一下,这样VS Test Explorer才能发现新的test。
运行测试,结果Pass:
同样改一下Patient类(别忘了Build一下),让结果失败:
从失败信息可以看到期待值和实际值。
StartsWith, EndsWith
[Fact] public void CalculateFullNameStartsWithFirstName() { var p = new Patient { FirstName = "Nick", LastName = "Carter" }; Assert.StartsWith("Nick", p.FullName); } [Fact] public void CalculateFullNameEndsWithFirstName() { var p = new Patient { FirstName = "Nick", LastName = "Carter" }; Assert.EndsWith("Carter", p.FullName);e); }
Build,然后Run Test,结果Pass:
忽略大小写 ignoreCase:
string默认的Assert是区分大小写的,这样就会失败:
可以为这些方法添加一个参数ignoreCase设置为true,就会忽略大小写:
包含子字符串 Contains
[Fact] public void CalculateFullNameSubstring() { var p = new Patient { FirstName = "Nick", LastName = "Carter" }; Assert.Contains("ck Ca", p.FullName); }
Build,测试结果Pass。
正则表达式,Matches
测试一下First name和Last name的首字母是不是大写的:
[Fact] public void CalculcateFullNameWithTitleCase() { var p = new Patient { FirstName = "Nick", LastName = "Carter" }; Assert.Matches("[A-Z]{1}{a-z}+ [A-Z]{1}[a-z]+", p.FullName); }
Build,测试通过。
数值 Assert
首先为Patient类添加一个property: BloodSugar。
public class Patient { public Patient() { IsNew = true; _bloodSugar = 5.0f; } private float _bloodSugar; public float BloodSugar { get { return _bloodSugar; } set { _bloodSugar = value; } } ...
Equal:
[Fact] public void BloodSugarStartWithDefaultValue() { var p = new Patient(); Assert.Equal(5.0, p.BloodSugar); }
Build,测试通过。
范围, InRange:
首先为Patient类添加一个方法,病人吃饭之后血糖升高:
public void HaveDinner() { var random = new Random(); _bloodSugar += (float)random.Next(1, 1000) / 100; // 应该是1000 }
添加test:
[Fact] public void BloodSugarIncreaseAfterDinner() { var p = new Patient(); p.HaveDinner(); // Assert.InRange<float>(p.BloodSugar, 5, 6); Assert.InRange(p.BloodSugar, 5, 6); }
Build,Run Test,结果Fail:
可以看到期待的Range和实际的值,这样很好。如果你使用Assert.True(xx >= 5 && xx <= 6)
的话,错误信息只能显示True或者False。
因为HaveDinner方法里,表达式的分母应该是1000,修改后,Build,Run,测试Pass。
浮点型数值的Assert
在被测项目添加这两个类:
namespace Hospital{ public abstract class Worker { public string Name { get; set; } public abstract double TotalReward { get; } public abstract double Hours { get; } public double Salary => TotalReward / Hours; } public class Plumber : Worker { public override double TotalReward => 200; public override double Hours => 3; }}
然后针对Plumber建立一个测试类 PlumberShould.cs, 并建立第一个test:
namespace Hospital.Tests{ public class PlumberShould { [Fact] public void HaveCorrectSalary() { var plumber = new Plumber(); Assert.Equal(66.666, plumber.Salary); } }}
Build项目, 然后再Test Explorer里面选择按Class分类显示Tests:
Run Selected Test, 结果会失败:
这是一个精度的问题.
在Assert.Equal方法, 可以添加一个precision参数, 设置精度为3:
[Fact] public void HaveCorrectSalary() { var plumber = new Plumber(); Assert.Equal(66.666, plumber.Salary, precision: 3); }
Build, Run Test:
因为有四舍五入的问题, 所以test仍然fail了.
所以还需要改一下:
[Fact] public void HaveCorrectSalary() { var plumber = new Plumber(); Assert.Equal(66.667, plumber.Salary, precision: 3); }
这次会pass的:
Assert Null值
[Fact] public void NotHaveNameByDefault() { var plumber = new Plumber(); Assert.Null(plumber.Name); } [Fact] public void HaveNameValue() { var plumber = new Plumber { Name = "Brian" }; Assert.NotNull(plumber.Name); }
有两个方法, Assert.Null 和 Assert.NotNull, 直接传入期待即可.
测试会Pass的.
集合 Collection Assert
修改一下被测试类, 添加一个集合属性, 并赋值:
namespace Hospital{ public abstract class Worker { public string Name { get; set; } public abstract double TotalReward { get; } public abstract double Hours { get; } public double Salary => TotalReward / Hours; public List<string> Tools { get; set; } } public class Plumber : Worker { public Plumber() { Tools = new List<string>() {注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。