У меня есть объект, который реализует inotifypropertychanged . Как и следовало ожидать, есть свойства, которые, если вы измените напрямую, он уведомит об изменении. Тем не менее, существуют другие свойства, которые могут измениться, а также побочный эффект от изменения другого свойства и , что уведомление -это то, что я хочу проверить.public class MyObject : INotifyPropertyChanged
{
public string MyProperty
{
get;
set; // notify code omitted for brevity
}
public string DependentOnMyProperty
{
get; // value gets updated based on `MyProperty`
}
}
var obj = new MyObject();
obj.MyProperty = "Value"; // should notify of property changes: MyProperty and DependentOnMyProperty
< /code>
Как я могу написать мой модульный тест таким образом, чтобы он мог обнаружить событие для другого свойства? Assert.raises () , кажется, сообщает только о первом поднятом событии, а затем игнорирует остальное. В то же время, это то, что у меня сейчас есть.[Fact]
public void ComputedProperty_WhenChangingDependentValue_RaisesPropertyChangedEvent()
{
var obj = new MyObject();
var hitCounts = new Dictionary();
obj.PropertyChanged += (sender, args) =>
{
if (!hitCounts.ContainsKey(args.PropertyName!))
{
hitCounts[args.PropertyName] = 0;
}
hitCounts[args.PropertyName]++;
};
obj.MyProperty = "Test Value";
Thread.Sleep(100); // Allow time for computed property to update
obj.MyProperty.Should().Be("Test Value");
obj.DependentOnMyProperty.Should().Be("Value derived from Test Value");
hitCounts.Should().ContainKey(nameof(MyObject.DependentOnMyProperty)).WhoseValue.Should().Be(1);
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... nts-raised