4

Xamarin Studio を使用して、MvvmCross を使用して TDD に着手しています。まず、適切なメッセージが受信された場合にのみロジックが実行されるように、メッセージがビュー モデルに発行される効果をテストすることから始めようとしています。

Stuart の優れたチュートリアルのいくつかをハックして、モデルを表示するための位置データの伝播を成功させ、IOS ビューのテキスト コントロール、マップ マーカーなどを更新しました。

しかし、さらに深く掘り下げる前に、TDD を使用してコーディングしたいと思います。ビューモデルを人為的にセットアップし、テスト ハーネスで人為的にメッセージをパブリッシュするにはどうすればよいですか? :

public class MyViewModel : MvxViewModel
{
    private readonly MvxSubscriptionToken _token;

    public MyViewModel(ILocationService service, IMvxMessenger messenger)
    {
        //weak reference
        _token = messenger.Subscribe<LocationMessage>(OnLocationMessage);
    }

    private void OnLocationMessage(LocationMessage locationMessage)
    {
        Lat = locationMessage.Lat;
        Lng = locationMessage.Lng;
        // Console.WriteLine("on loc msg {0:0.0000}, {1:0.0000}", Lat, Lng);
    }

    private double _lng;
    public double Lng
    {
        get { return _lng; }
        set
        {
            _lng = value;
            RaisePropertyChanged(() => Lng);
        }
    }

    private double _lat;
    public double Lat
    {
        get { return _lat; }
        set
        {
            _lat = value;
            RaisePropertyChanged(() => Lat);
        }
    }
}


[TestFixture()]
public class LocTest
{
    [Test()]
    public void LocationMessageIsRecieved()
    {
        // im using nsubstitute to mock with
        var locService = Substitute.For<ILocationService>();  
        var msgr = Substitute.For<IMvxMessenger>();
        var vm = new Map2ViewModel(locService, msgr);

        var locMsg = new LocationMessage(this, 1F, 2F);
        msgr.Publish(locMsg);

        var lat = vm.Lat;
        Assert.AreEqual(2F, lat);  // says lat is 0.0  and nunit doesnt let me debug the tests :(
    }
}

MvvmCross を使用した TDD に関する優れたチュートリアルは素晴らしいでしょう

4

2 に答える 2