publicclassCalculatorTests { [Fact] publicvoidShouldAddEquals5() //注意命名规范 { //Arrange var sut = new Calculator(); //sut-system under test,通用命名 //Act var result = sut.Add(3, 2); //Assert Assert.Equal(5, result); } }
publicclassPatient : Person, INotifyPropertyChanged { publicPatient() { IsNew = true; BloodSugar = 4.900003f; History = new List<string>(); //throw new InvalidOperationException("not able to create"); 测试异常使用 }
[Fact] publicvoidHaveDefaultBloodSugarWhenCreated() { var p = new Patient(); var bloodSugar = p.BloodSugar; Assert.Equal(4.9f, bloodSugar,5); //判断是否相等,最后一个是精度,很重要 Assert.InRange(bloodSugar, 3.9, 6.1);//判断是否在某一范围内 }
空值判断
1 2 3 4 5 6 7
[Fact] publicvoidHaveNoNameWhenCreated() { var p = new Patient(); Assert.Null(p.FirstName); Assert.NotNull(_patient); }
[Fact] publicvoidBeAPerson() { var p = new Patient(); var p2 = new Patient(); Assert.IsNotType<Person>(p); //测试对象是否相等,注意这里为false Assert.IsType<Patient>(p);
[Fact] publicvoidThrowException() { var p = new Patient(); //判断是否返回指定类型的异常 var ex = Assert.Throws<InvalidOperationException>(()=> { p.NotAllowed(); }); //判断异常信息是否相等 Assert.Equal("not able to create", ex.Message); }
判断是否触发事件
1 2 3 4 5 6 7 8 9
[Fact] publicvoidRaizeSleepEvent() { var p = new Patient(); Assert.Raises<EventArgs>( handler=>p.PatientSlept+=handler, handler=>p.PatientSlept -= handler, () => p.Sleep()); }
判断属性改变是否触发事件
1 2 3 4 5 6 7
[Fact] publicvoidRaisePropertyChangedEvent() { var p = new Patient(); Assert.PropertyChanged(p, nameof(p.HeartBeatRate), () => p.IncreaseHeartBeatRate()); }
[Theory] [InlineData(1,2,3)] [InlineData(2,2,4)] [InlineData(3,3,6)] publicvoidShouldAddEquals(int operand1,int operand2,int expected) { //Arrange var sut = new Calculator(); //sut-system under test //Act var result = sut.Add(operand1, operand2); //Assert Assert.Equal(expected, result); }
2.[MemberData]
可以在多个测试中使用
创建一个类
1 2 3 4 5 6 7 8 9 10 11 12
publicclassCalculatorTestData { privatestaticreadonly List<object[]> Data = new List<object[]> { newobject[]{ 1,2,3}, newobject[]{ 1,3,4}, newobject[]{ 2,4,6}, newobject[]{ 0,1,1}, };
[Theory] [MemberData(nameof(CalculatorTestData.TestData),MemberType =typeof(CalculatorTestData))] publicvoidShouldAddEquals2(int operand1, int operand2, int expected) { //Arrange var sut = new Calculator(); //sut-system under test //Act var result = sut.Add(operand1, operand2); //Assert Assert.Equal(expected, result); }
[Theory] [MemberData(nameof(CalculatorCsvData.TestData), MemberType = typeof(CalculatorCsvData))] publicvoidShouldAddEquals3(int operand1, int operand2, int expected) { //Arrange var sut = new Calculator(); //sut-system under test //Act var result = sut.Add(operand1, operand2); //Assert Assert.Equal(expected, result); }
[Theory] [CalculatorDataAttribute] publicvoidShouldAddEquals4(int operand1, int operand2, int expected) { //Arrange var sut = new Calculator(); //sut-system under test //Act var result = sut.Add(operand1, operand2); //Assert Assert.Equal(expected, result); }