?????????д???????????????????????????????????Щ?????????????????????????????????????????????????飬??????С???????????????????????????????????????????????????????????????????????????б?????м?????
   
    Person???????????????????о???????????????????
   
    ????FirstName
   
    ???????????FirstName???????????????????£?
   
    [TestMethod]
   
    public void Person_FirstName_Set????
   
    varperson = new Person??"Adam"?? "Smith"????
   
    person.FirstName = "Bob";
   
    Assert.AreEqual??"Bob"?? person.FirstName????
 
    }
   
    ????????????????FirstName????????
   
    [TestMethod]
    public void Person_FirstName_Set_PropertyChanged????
   
    {
   
    var person = new Person??"Adam"?? "Smith"????
   
    var eventAssert = new Granite.Testing.PropertyChangedEventAssert??person????
   
    person.FirstName = "Bob";
   
    eventAssert.Expect??"FirstName"????
   
    }
   
    ???????????????????????????????????"????????????'FirstName'?????????????'IsChanged'".?????????FirstName???????????"IsChanged"??????????????????????????????????????
   
    [TestMethod]
    public void Person_FirstName_Set_PropertyChanged????
   
    {
   
    var person = new Person??"Adam"?? "Smith"????
   
    var eventAssert = new Granite.Testing.PropertyChangedEventAssert??person????
   
    person.FirstName = "Bob";
   
    eventAssert.SkipEvent?????? //this was IsChanged
   
    eventAssert.Expect??"FirstName"????
   
    }
   
    ?????????????????????????FirstName?????????????????????????API??IsChanged??FullName?????仯??
   
    [TestMethod]
 
   public void Person_FullName_Changed_By_Setting_FirstName????
   
    {
   
    var person = new Person??"Adam"?? "Smith"????
   
    person.FirstName = "Bob";
   
    Assert.AreEqual??"Bob Smith"?? person.FullName????
   
    }
   

    public void Person_IsChanged_Changed_By_Setting_FirstName????
   
    {
   
    var person = new Person??"Adam"?? "Smith"????
   
    person.FirstName = "Bob";
   
    Assert.IsTrue??person.IsChanged????
   
    }
   
    ??????????Щ???????????????????????????????
   
    [TestMethod]
      
    public void Person_IsChanged_Property_Change_Notification_By_Setting_FirstName????
   
    {
   
    var person = new Person??"Adam"?? "Smith"????
   
    var eventAssert = new PropertyChangedEventAssert??person????
   
    person.FirstName = "Bob";
   
    eventAssert.Expect??"IsChanged"????
   
    }
   
    [TestMethod]
          
     public void Person_FullName_Property_Change_Notification_By_Setting_FirstName????
   
    {
   
    var person = new Person??"Adam"?? "Smith"????
   
    var eventAssert = new PropertyChangedEventAssert??person????
   
    person.FirstName = "Bob";
   
    eventAssert.SkipEvent?????? //this was IsChanged
   
    eventAssert.SkipEvent?????? //this was FirstName
   
    eventAssert.Expect??"FullName"????
   
    }
   
    ?????????????????HasErrors????????ErrorsChanged?????
   
    [TestMethod]
        
    public void Person_FirstName_Set_HasErrorsIsFalse????
   
    {
   
    var person = new Person??"Adam"?? "Smith"????
   
    person.FirstName = "Bob";
   
    Assert.IsFalse??person.HasErrors????
   
    }
   
    [TestMethod]
  
    public void Person_FirstName_Set_ErrorsChanged_Did_Not_Fire????
   
    {
   
    var person = new Person??"Adam"?? "Smith"????
   
    var errorsChangedAssert = new ErrorsChangedEventAssert??person????
   
    person.FirstName = "Bob";
   
    errorsChangedAssert.ExpectNothing??????
   
    }