我正在使用Xamarin Studio使用MvvmCross開始TDD。我試圖首先測試發佈到視圖模型的消息的效果,以便只有在收到適當的消息時才執行邏輯。如何使用IMvxMessenger對MvvmCross進行單元測試
我將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任何偉大的教程將是非常美妙
您基本上可以創建MvxMessengerHub,如Greg Shackles github回購所示(請參閱下面的Stuart答案中的鏈接) –