I was working on a Silverlight application where property setter raises PropetyChanged events for other read only properties that needs to be updated. Something like,
private List<User> users;
public List<User> Users
{
get
{
return users;
}
set
{
users = value;
Changed("Users");
Changed("EnableDisableButton");
Changed("UsersCount");
}
}
private void Changed(string propertyName)
{
if (PropertyChanged == null) return;
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
Here is how I came up with a test case that asserts the proper events are raised in proper order.
[Test]
public void ProperEventsAreRaisedWhenUsersChanges()
{
var propertiesChanged = new List<string>();
var model = new UserModel();
model.PropertyChanged += (sender, args) => propertiesChanged.Add(args.PropertyName);
model.Users = new List<User>();
propertiesChanged[0].ShouldBe("Users");
propertiesChanged[1].ShouldBe("EnableDisableButton");
propertiesChanged[2].ShouldBe("UsersCount");
}
ShouldBe() is an extension method which does Assert.That internally.

