2

このプロパティをテストするための最良の方法は何ですか:

  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);
    }

NotifyPropertyChanged()しかし、UIの更新に使用されるテストを行う必要があり ます。

4

3 に答える 3

3

簡単な方法はこれを行うことです:

var notified = false;
compassLogData.PropertyChanged += (s, e) =>
{
    if(e.PropertyName == "ThreadId")
        notified = true;
};

compassLogData.ThreadId = "[11]";
Assert.True(notified);
于 2013-02-05T11:08:49.490 に答える
1

イベントをテストするとき、私はこのパターンを使用します:

[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-05T11:13:04.800 に答える
0

property-changed-eventを処理し、正しいプロパティに対してisが発生するかどうかを確認する必要があります。

[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();
        }
    }
}
于 2013-02-05T11:11:10.993 に答える