测试此属性的最佳方法是什么:
public string ThreadId {
get { return _threadId; }
set {
_threadId = value;
NotifyPropertyChanged();
}
}到目前为止,我做了这样的测试:
[Fact]
public void ThreadIdTest() {
compassLogData.ThreadId = "[11]";
const string expected = "[11]";
string actual = compassLogData.ThreadId;
Assert.Equal(expected, actual);
}但我需要一个away来测试NotifyPropertyChanged(),它用于更新UI。
发布于 2013-02-05 19:08:49
一种简单的方法是这样做:
var notified = false;
compassLogData.PropertyChanged += (s, e) =>
{
if(e.PropertyName == "ThreadId")
notified = true;
};
compassLogData.ThreadId = "[11]";
Assert.True(notified);发布于 2013-02-05 19:13:05
在测试事件时,我使用以下模式:
[Test]
public void PropertyChangeTest()
{
var viewModel = new ViewModel();
var args = new List<PropertyChangedEventArgs>();
viewModel.PropertyChanged += (o, e) => args.Add(e);
viewModel.ThreadId = "[11]";
Assert.AreEqual("ThreadId",args.Single().PropertyName);
}将eventargses添加到列表中可以检查它被触发的次数等。
通常,我真的看不出测试那个小逻辑tbh有什么意义。
发布于 2013-02-05 19:11:11
您必须处理property -changed event,并检查是否为正确的属性触发了。
[Fact]
public void ThreadIdTest() {
compassLogData.ThreadId = "[11]";
var previousValue = compassLogData.ThreadId; // Question: how is this object set?
bool propertyWasUpdated = false;
compassLogData.PropertyChanged += (s, e) => {
if (e.PropertyName == "ThreadId") {
propertyWasUpdated = true;
}
};
const string expected = "[12]";
compassLogData.ThreadId = expected;
string actual = compassLogData.ThreadId;
Assert.Equal(expected, actual);
ASsert.IsTrue(propertyWasUpdated);
}另外,您应该仅在值实际更改时触发事件。我通常这样实现它:
public string ThreadId {
get { return _threadId; }
set {
if (value != _threadId) {
_threadId = value;
NotifyPropertyChanged();
}
}
}https://stackoverflow.com/questions/14705953
复制相似问题